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

Access to CreateView form modal on every page

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

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

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

urls.py

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

and modal in base.html (form is in 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 中的路径,对吧? 你能帮帮我吗?

您似乎想在 所有 视图中 包含 您的 django 表单,以便您可以在每个 html模板。

为此,您可以注册自定义上下文处理器,并将表单作为上下文变量发送到所有模板。基本上,您只需要一个函数 return 一个将您的表单保存为值 (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>

您可以使用 命名的 urls(而不是硬编码它们),如 {% url 'scenario-create' %} 中那样用于 action