如何在Django模板中集中URL?
我在编写Django应用程序时犯了一个错误,将模板中的所有URL硬编码 例如,我的链接看起来像:如何在Django模板中集中URL?,django,django-templates,django-urls,Django,Django Templates,Django Urls,我在编写Django应用程序时犯了一个错误,将模板中的所有URL硬编码 例如,我的链接看起来像: <a href="/course/63/">Advanced Basketweaving</a> 现在,我的客户坚决希望我将与此链接类似的所有链接实例更改为 <a href="/class/63/">Advanced Basketweaving</a> 其中“班级”取代“课程” 用爱默生的话来说,愚蠢的一致性是弱智的妖精,因此我必须通过进行
<a href="/course/63/">Advanced Basketweaving</a>
现在,我的客户坚决希望我将与此链接类似的所有链接实例更改为
<a href="/class/63/">Advanced Basketweaving</a>
其中“班级”取代“课程”
用爱默生的话来说,愚蠢的一致性是弱智的妖精,因此我必须通过进行艰苦的查找和替换操作来为我的错误付出代价
在这里正确的做法是什么?我认为标准方法是使用:
…主要的好处是您不需要硬编码URL。所以现在有点晚了,但这次你最好使用
url
标记,以防客户端明天回来,希望他们都阅读/classes/class/63
——这时你只需要更改URLconf文件中的单个url模式。假设你的url.py有这样一个条目:
url(r'^course/(?P<course_id>\d+)/$', view_course, name='view_course')
url(r'^course/(?P\d+/$),view\u course,name='view\u course')
您可以在模板中使用:
<a href="{% url view_course course.id %}">Advanced Basketweaving</a>
然后,当您的客户要求您更改URL时,您只需在URL.py中进行一次更改
url(r'^class/(?P<course_id>\d+)/$', view_course, name='view_course')
url(r'^class/(?P\d+/$),查看课程,name='view\u课程')
不需要对模板进行任何更改
愉快的搜索和替换--现在您知道下一次;) 使用sed(提交到版本控制后)。对整个目录进行一次搜索和替换
这里有一个方法:
您可能还应该创建一个视图,将旧样式的url重定向到新样式的url,以防您丢失任何书签或链接。url的第三个参数是
kwargs
,因此我认为您必须使用name='view\u course'
。很好,url模式被破坏了。现在修复了。如果你碰巧安装了MySQL,它附带了一个很好的命令,这对这些操作很方便。我做了一个小小的编辑。按照惯例,我使用原始字符串作为URL模式。否则,您必须编写'\\d+'
。换句话说,您不必逃避原始字符串中的反斜杠。@BrianNeal为什么不测试它?当您这样做时,您将看到两个版本都可以工作。在url()
中设置name
的方式根本不重要{%url%}
(基于反向
)尝试加载相应的视图,而不是url记录。如果有一个视图函数可以接受这些参数和KWARG,则会找到匹配项。python中每个参数数量有限的函数都可以使用位置参数或命名参数调用。
url(r'^class/(?P<course_id>\d+)/$', view_course, name='view_course')