1

私はdjangoを初めて使用し、単純なフォームPOSTで問題が発生しています。forms.pyにModelFormがあり、ユーザーがhtmlに情報を入力すると、views.pyがそれを取得して保存します。ただし、view.pyにビューが存在しないことが見つからないというエラーが表示され続けます。エラーを見つけるのを手伝ってください。ありがとうございました!

urls.py

urlpatterns = patterns('',
                       (r'^mypage/(?P<username>\w+)/$', 'recipeapp.views.my_view'),

forms.py

class NewRecipeForm(forms.ModelForm):

    user_info = forms.ForeignKey(User)
    title = forms.CharField(min_length=2,max_length=50,required=True,)
    post_date = forms.DateField(auto_now=True)
    ingredients = forms.TextField(widget=forms.Textarea(),)
    picture = forms.ImageField(upload_to='photos/%Y/%m/%d',)
    content = forms.TextField(widget=forms.Textarea(),)

views.py

@csrf_protect
from recipeapp.forms import NewRecipeForm

    def my_view(request,username):
        if request.method == 'POST':
            form = NewRecipeForm(request.POST)
            if form.is_valid():
                form.save()
        else:
            form = NewRecipeForm()

        return render_to_response('postlogin.html',{'username':username},{'form': form}, RequestContext(request))

postlogin.html

        <form action="" method="post" id="form">
            {% csrf_token %}

                <div id="dish-name">
                <label><p>Dish name</p></label>
                {{form.title}}
                </div>

                <div id="ingredients">
                <label><p>Ingredients</p></label>
                {{form.ingredients}}
                </div>

                <div id="content">
                <label><p>Content</p></label>
                {{form.content}}
                </div>

                {{form.picture}}
       </form>
4

1 に答える 1

1

それは本当にあなたのviews.py全体ですか?少なくとも3つの問題があります。

まず、インポートしていません。csrf_protect他の名前と同様に、デコレータを使用する前に定義する必要があります。

次に、ファイルではなく、実際の関数を装飾する必要があります。デコレータは、の関数定義の直前に配置する必要がありますmy_view

第三に、あなたのインデントは壊れています-はdefまったくインデントされるべきではありません。

これらすべてを考慮すると、構文エラーのためにPythonがビューのインポートに失敗していると思います。

また、実際には使用しないcsrf_protectでください。ミドルウェアでCSRF保護を有効にし(デフォルトでオンになっています)、csrf_exemptデコレータのみを使用し、ごくまれにのみ使用する必要があります。

于 2012-06-01T13:36:05.127 に答える