Django url 反解析

Django 是个python中web-framework MTV框架能够快速的开发网站, 刚开始学习django时候, 对于模版里面经常根据自己项目的urls来手写链接. 虽然这种方法是可行的, 但是不是规范的。 为什么呢? 最近公司要做一个django改造, 由于改造需求的原因, 项目urls统一加上项目名字 urls.py 中很简单, 在url前面加上就行. 但是很多的模版中的url都要改掉. 这就增加了改造的复杂度。 通过此次改造我发现 其实django中有一种很好的机制, 来通过urls中的viewname 来反解析url生成url.

他们分别是: django.core.urlresolvers.reversetemplatetags.url

django.core.urlresolvers.reverse

这个函数主要用在于python代码中, 详情请看下面案例

urls.py这里是一个对象详细页面, 需要两个参数. models.py中要通过viewname detail 来生成url.

urls.py

urlpatterns = [
    ...
    url(r'^step/(?P<label>.*)/(?P<name>.*)$', step, name="detail"),
    ...
]
<\>Python

models.py

class Step(models.Model):
    ......
    ......

    def get_absolute_url(self):
        return reverse('detail', kwargs={
            'label': self.label,
            'name': self.name}
        )

    def label_name(self):
        return self.label.name

    def __unicode__(self):
        return unicode(self.name)

    def __str__(self):
        return self.name
<\>Python

templatetags.url

这里还使用上面的urls.py 中的detail举例, 在模版中生成url

base.html

{% url "detail" step.label.name step.name %}
<\>Html

𝔔