检查表单是否存在或是否在模板中呈现。姜戈

Check if a form exists or is rendered in Template. Django

我有一种情况,有时我显示一个表单,有时我不显示它。

实际上,有多个表单使用同一个 Submit 按钮。

当特定表单未显示在模板中时,我该怎么做才能处理这种情况。

模板代码

{% extends BASE_TEMPLATE %}
{%  load crispy_forms_tags %}
{% block title %}<h2>New Thread</h2>{% endblock %}
{% block content %}
    <div class="col-md-6">
        <form method="post" accept-charset="utf-8">{% csrf_token %}
            {{ threadForm|crispy }}
            {{ postForm|crispy }}
            {% if SHOW_WIKI %}
            {{ wikiFrom|crispy }}
            {% endif %}
            <input type="submit" class="btn btn-primary btn-sm" value="Submit"/>
        </form>
    </div>

{% endblock %}

这是查看代码

@login_required
def createThread(request, topic_title=None):
    if topic_title:
        try:
            if request.method == 'POST':
                topic = Topic.getTopic(topic_title)
                threadForm = ThreadSUForm(request.POST, prefix='thread')
                postForm = PostForm(request.POST, prefix='post')
                show_wiki = getattr(settings, "REFORUMIT_ALLOW_WIKI_FOR_THREADS", False) and topic.is_wiki_allowed
                wikiForm = WikiCreateForm(request.POST, prefix='wiki')

                if threadForm.is_valid() and postForm.is_valid() and wikiForm.is_valid():
                    thread = threadForm.save(commit=False)
                    post = postForm.save(commit=False)
                    wiki = wikiForm.save(commit=False)

                    thread.op = post
                    thread.wiki_revision = None

                    post.setMeta(request)
                    wiki.setMeta(request)


                    if is_authenticated(request):
                        post.created_by = request.user
                        wiki.author = request.user

                    thread.save()
                    wiki.wiki_for = thread
                    wiki.save()
                    post.save()

                    thread.wiki_revision = wiki

                    thread.save()


                    return HttpResponseRedirect(thread.get_absolute_url)
            else:
                topic = Topic.getTopic(topic_title)
                threadForm = ThreadSUForm(prefix='thread', initial={"topic": topic})
                postForm = PostForm(prefix='post')
                wikiForm = WikiCreateForm(prefix='wiki')
                show_wiki = getattr(settings, "REFORUMIT_ALLOW_WIKI_FOR_THREADS", False) and topic.is_wiki_allowed
            context = dict(threadForm=threadForm, postForm=postForm, wikiFrom=wikiForm, SHOW_WIKI=show_wiki)
            return render(request, 'reforumit/create_thread.html', context)
        except Topic.DoesNotExist:
            pass
    return redirect('topics')

这不会给出确切的答案,但您可以稍微更改一下代码。仅提供条件部分。

if threadForm.is_valid() and postForm.is_valid():
    thread = threadForm.save(commit=False)
    post = postForm.save(commit=False)

    thread.wiki_revision = None

    thread.op = post
    post.setMeta(request)

    if is_authenticated(request):
        post.created_by = request.user                  
        post.save()

    thread.save()

    if wikiForm.is_valid():
        print("WikiForm is valid!")
        wiki = wikiForm.save(commit=False)
        print("Wiki has content")
        wiki.setMeta(request)
        if is_authenticated(request):
            wiki.author = request.user
        wiki.wiki_for = thread
        wiki.save()
        thread.wiki_revision = wiki
        thread.save()

    return HttpResponseRedirect(thread.get_absolute_url)