0

これはほぼ間違いなく初心者のエラーですが、何が問題なのかわかりません。ここで他の同様の質問を読みましたが、まったく同じではないようです。

データを投稿する単純なフォームがありますが、常に完全に空白の応答が返されます。

コードは次のとおりです。

url.py

urlpatterns = patterns('shotgun.views',
    # shotgun App URL patterns
    url(r'^$', ControlPanelView.as_view(), name='index'),
)

フォーム.py

class ProjectAssignmentForm(forms.Form):

    projects = MultipleChoiceField(widget=forms.CheckboxSelectMultiple)

    def __init__(self, user_projs, *args, **kwargs):
        super(ProjectAssignmentForm, self).__init__(*args, **kwargs)

        self.fields["projects"].choices = tuple([(item.name, item.name) for item in SGProject.objects.all() if item.name != "Template Project"])
        self.fields["projects"].initial = user_projs

view.py

class ControlPanelView(SLBaseView):

    template_name = "shotgun/index.html"

    def get_context_data(self, **kwargs):
        context = super(ControlPanelView, self).get_context_data(**kwargs)

        sg_user = SGCustomNonProjectEntity01.objects.filter(code=self.request.user.get_full_name())[0]
        projs = SGProject.objects.filter(Q(entities__entity_id=sg_user.id), Q(entities__type="CustomNonProjectEntity01"))

        context["assigned_projs"] = projs

        if self.request.method == "POST":
            form = ProjectAssignmentForm(projs, self.request.POST)
            if form.is_valid():
                 # update user projects logic
        else:
            form = ProjectAssignmentForm(projs)

        context["pas_form"] = form

        return context

template.html

<div class="full_width" >
    <h4 class="no_pad" >{{ user.first_name|upper }}'S CONTROL PANEL</h4>
</div>

<div class="full_width top_tab">
    <div class="border border_pad">
    <h6>PROJECTS YOU ARE ASSIGNED TO</h6>
    {% if assigned_projs %}
        <form action="/intranet/shotgun/" method="post">{% csrf_token %}
            <div class="border_pad">
                {{ pas_form.projects.errors }}
                {{ pas_form.projects }}
                <input type="submit" value="Update" />
            </div>
        </form>
    {% else %}
        <p>You are not assigned to any projects.</p>
    {% endif %}
    </div>
</div>

settings.py で csrf ミドルウェアを有効にしています。

これらすべてから私が期待する動作は次のとおりです。

  • バインドされていないフォーム - データが事前入力されたページを表示します
  • 境界が無効です - 選択したデータを含むページを表示します
  • 有効な境界 - 更新されたデータでページを表示します
  • 非バインド データ ページは期待どおりに表示されますが、フォームの [更新] ボタンをクリックしてポスト リクエストが作成されるとすぐに、空白のページが表示されます。ステートメントの後に例外をスローしようとしましたif self.request.method == "POST"が、コードはここまで到達していないようです。何が起こっているのか本当にわかりません。

    4

    1 に答える 1

    -1

    views.py ファイルに構文エラーがあります。

        if self.request.method == "POST":
        form = ProjectAssignmentForm(projs, self.request.POST)
    

    する必要があります

        if self.request.method == "POST":
            form = ProjectAssignmentForm(projs, self.request.POST)
    

    デバッグをオフにしていませんか? これにより、出力が得られない理由が説明されます。致命的なエラーがあるため、django はエラー レポートを出力しますが、デバッグがオフの場合は、代わりに settings.py にリストされている管理者にエラー レポートを電子メールで送信します。

    settings.py で次のことを確認します。

    DEBUG = True
    
    于 2013-02-25T16:42:23.737 に答える