Django 2.1调用旧的Slug url变量

时间:2018-10-29 05:22:20

标签: python django listview url

我在通过以下类型的路径定向url模式时遇到一些问题:Listview-> Listview2-> DetailView。我的网址格式遇到了麻烦。这是我正在使用的东西:

Data
     --tank
       --__init__.py
       --cal.py
       --level.py

此应用程序的主页是所有客户端的列表。单击客户端将填充一个新页面,其中显示该客户端的子客户端列表(cost_center)。

这是我的模板{%url%}调用的一部分,它调用上面列出的我的最终路径(/ slug / slug /):

app_name = 'ism'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<slug:client_slug>/', views.CostCenterListView.as_view(), name='cost_center_list'),
path('<slug:client_slug>/<slug:cost_center_slug>/', views.cost_center_detail, name='cost_center_detail'),
]

将此内容及其随附的视图添加到一起会导致错误:

{% for cost_center in cost_centers %}
<ul>
    <li><a href="{% url 'ism:cost_center_detail' cost_center.slug %}">{{ cost_center }}</a></li>
</ul>
{% endfor %} 

您能确认我的问题必须处理我模板中的{%url%}而不记得URL路径中的第一个标记吗?我的错误消息似乎表明它正在尝试查找:

NoReverseMatch at /ism/cleint_slug/

代替:

.../cost_center_slug 

我的假设是django会神奇地记住我的url模式的第一部分(即client_slug),但这似乎没有发生。我是否需要在视图中引入更多上下文变量,以允许在上面的模板中调用两个url变量(URL变量是否是正确的术语?听起来不正确)吗?

这是我的完整错误消息('cffd'是表示成本中心的一条子弹):

.../client_slug/cost_center_slug/

这是我的views.py。最初,我尝试使用DetailView及其get_object方法,但是除了我显示的基于函数的视图

之外,我无法使其正常工作
Reverse for 'cost_center_detail' with arguments '('cffd',)' not found. 
1 pattern(s) tried: 
['ism/(?P<client_slug>[-a-zA-Z0-9_]+)/(?P<cost_center_slug>[-a-zA-Z0-9_]+)/$']

1 个答案:

答案 0 :(得分:1)

我认为您输入的网址有误。应该是

{% url 'ism:cost_center_list' client_slug %}

或(您提供的参数不足以构造cost_center_detail网址)

{% url 'ism:cost_center_detail' client_slug cost_center.slug %}