Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django模板中集中URL?_Django_Django Templates_Django Urls - Fatal编程技术网

如何在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> 其中“班级”取代“课程” 用爱默生的话来说,愚蠢的一致性是弱智的妖精,因此我必须通过进行

我在编写Django应用程序时犯了一个错误,将模板中的所有URL硬编码

例如,我的链接看起来像:

<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')