玩转Django 2.0
上QQ阅读APP看书,第一时间看更新

3.3 设置参数name

除了在URL里面设置变量之外,Django还可以对URL进行命名。在index的urls.py、views.py和模板myyear.html中添加以下代码:

上述代码分别从URL、视图函数和HTML模板来说明参数name的具体作用,整个执行流程如下:

(1)当用户访问该URL时,项目根据URL信息选择视图函数myyear处理,并将该URL命名为myyear。

(2)视图函数myyear将模板myyear.html作为响应内容并生成相应的网页返回给用户。

(3)在模板myyear.html中分别设置两个标签a,虽然两个标签a的href属性值的写法有所不同,但实质上两者都指向命名为myyear的URL地址信息。

(4)第二个标签a的href为{% url 'myyear' 2018 %},这是Django的模板语法,模板语法以{% %}表示。其中,url 'myyear'是将命名为myyear的URL地址信息作为href属性值;2018是该URL的变量year,若URL没有设置变量值,则无须添加。

从上述例子可以看到,模板中的myyear与urls.py所设置的参数name是一一对应的。参数name的作用是对该URL地址信息进行命名,然后在HTML模板中使用可以生成相应的URL信息。

在以往,大多数开发者都是采用第一种方法在模板上设置每个标签a的href属性值,如果URL地址信息发生变更,就要修改每个标签a的href属性值,这种做法不利于URL的变更和维护。而在URL中设置参数name,只要参数name的值不变,无论URL地址信息如何修改都无须修改模板中标签a的href属性值。运行结果如图3-4所示。

图3-4 运行结果