我尝试使用网址名称将自定义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。 有没有办法配置模式,所以它只关心名称?。
由于
答案 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>