我想知道,是否可以创建包含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
中的路径,对吗?
你能帮我吗?
答案 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
中那样使用命名的网址(而不是对其进行硬编码)。