Django url模式名称不起作用

时间:2018-04-23 12:35:27

标签: django django-templates django-views

我尝试使用网址名称将自定义arg发送到我的TemplateView。

Urls.py

urlpatterns = [
url(r'^$', index.as_view(template_name='index.html', gotodiv='whatis'), name='whatis'),
url(r'^$', index.as_view(template_name='index.html', gotodiv='whybepartofit'), name='whybepartofit')
]

Views.py

class index(TemplateView):
template_name = "index.html"
gotodiv = ''

def get_context_data(self, **kwargs):
    context = super(index, self).get_context_data(**kwargs)
    context['gotodiv'] = self.gotodiv
    return context

模板

 <li>
    <a href="{% url 'whatis' %}">What is it?</a>
 </li>
 <li>
    <a href="{% url 'whybepartofit' %}">Why be part of it?</a>
 </li>

问题在于它并不关心url名称,因为两种情况下的模式都匹配。所以它总是转到第一个模式(在这个例子中,带有&#34; whatis&#34; gotodiv arg。 有没有办法配置模式,所以它只关心名称?。

由于

1 个答案:

答案 0 :(得分:1)

正如您所发现的,r'^$'只能有一个URL模式,因为Django将使用匹配的第一个模式。

您可以将网址更改为:

urlpatterns = [
    url(r'^$', index.as_view(template_name='index.html'), name='index'),
]

然后将锚点添加到模板中的链接:

 <li>
    <a href="{% url 'index' %}#whatis">What is it?</a>
 </li>
 <li>
    <a href="{% url 'index' %}#whybepartofit">Why be part of it?</a>
 </li>