在每个页面上访问CreateView表单模式

时间:2019-12-15 10:50:25

标签: python django django-forms django-views create-view

我想知道,是否可以创建包含CreateView表单的模式,并在每个视图的django的每个页面上都可以访问它?

到目前为止,我的CreateView中有一个views.py

class ScenarioCreateView(CreateView):
    model = Scenario
    fields = ['title', 'area', 'author']

urls.py

path('scenario/new/', ScenarioCreateView.as_view(), name='scenario-create'),

base.html中的模式(表单位于scenario_form.html中):

<li><a class="modal-trigger" href="#modal1"><i class="material-icons">add</i></a></li>
<!-- Modal Structure -->
<div id="modal1" class="modal" method="post" action="/scenario/new/">
    <div class="modal-content">
        {% block new %}
        {% endblock %}
    </div>
    <div class="modal-footer">
        <a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a>
    </div>
</div>

它现在仅从/scenario/new/开始工作。 我可能应该更改urls.py中的路径,对吗? 你能帮我吗?

1 个答案:

答案 0 :(得分:1)

似乎您想在 all 视图中包括您的Django表单,以便可以在每个html模板上显示该表单。

要实现此目的,您可以注册自定义上下文处理器,然后将表单作为上下文变量发送到所有模板。基本上,您只需要一个函数来返回将您的表单作为值(docs)的字典:

from .forms import ScenarioForm  # <-- change it based on your form name

def include_modal_context_processor(request):
    return {'my_form': ScenarioForm(request.POST or None)}

(不要忘记在settings.py中注册它)

和模板(base.html):

<li><a class="modal-trigger" href="#modal1"><i class="material-icons">add</i></a></li>
<!-- Modal Structure -->
<div id="modal1" class="modal" method="post" action="{% url 'scenario-create' %}">
    <div class="modal-content">
        {{ my_form }}
    </div>
    <div class="modal-footer">
        <a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a>
    </div>
</div>

对于{% url 'scenario-create' %},您可以像在action中那样使用命名的网址(而不是对其进行硬编码)。