【问题标题】:Django url pattern name not workingDjango url 模式名称不起作用
【发布时间】:2018-10-03 12:12:12
【问题描述】:

我正在尝试使用 url 名称将自定义 arg 发送到我的 TemplateView。

网址.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 名称,因为模式在两种情况下都匹配。所以它总是进入第一个模式(在这个例子中,那个带有“whatis”gotodiv arg. 有没有办法配置模式,让它只关心名称?

谢谢

【问题讨论】:

  • 顺便说一句,最好将基于类的视图命名为Index。如果你使用小写的index,它在其他 Django 用户看来就像一个基于函数的视图。

标签: django django-templates django-views


【解决方案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>

【讨论】:

  • 谢谢!这是我尝试的第一件事,但当时没有用。在您回答后再次尝试并完美运行!
猜你喜欢
  • 2019-01-30
  • 2016-08-17
  • 2021-09-29
  • 2019-04-20
  • 2019-12-07
  • 1970-01-01
  • 2015-03-04
  • 2013-05-09
  • 2011-04-28
相关资源
最近更新 更多