从模板调用基于类的视图

时间:2018-07-20 10:33:04

标签: django-templates django-urls

我是Django / Python的新手,正在使用Django 2。 在urls.py中,我定义了:

> urlpatterns = [    path('delivery/add'/,views.DeliveryCreate.as_view(),name='delivery-add'), ]

在模板(app / template / app / main.html)中的调用是:

  <li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      Deliveries
    </a>
    <div class="dropdown-menu" aria-labelledby="navbarDropdown">           
        <a class="dropdown-item" href="{% url 'delivery/add'  %}">Create Delivery ...</a>
    </div>
  </li> 

模板(app / template / app / delivery_form.html)存在

但这会导致Exception值

Reverse for 'delivery/add' not found. 'delivery/add' is not a valid view function or pattern name.

使用path('delivery-add'/...)代替path('delivery/add'/...),它适用于href="{% url 'delivery-add'...%}

为什么它不能与'/ add'一起使用?

Thx

1 个答案:

答案 0 :(得分:1)

{% url %}模板标记和reverse函数都可以使用您的网址格式的name,而不是实际的网址!

因此,既然您已将模式定义为

urlpatterns = [ path('delivery/add'/, views.DeliveryCreate.as_view(),name='delivery-add'), ]

即,名称为'delivery-add',然后您必须按照经验将其传递给{% url %},即{% url 'delivery-add' %}可以正常工作。

还请注意,您的模式(/中的字符串末尾path('delivery/add'/... 肯定需要删除/