zoukankan      html  css  js  c++  java
  • Django之url

    url配置:

    from django.conf.urls import url
    from . import views
    urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/([0-9]{4})/$', views.year_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    ]

    上面最后一个url将调用views.article_detail(request, '2003', '03', '03'),函数参数按顺序来,如果想对参数命名可以采用下面的方式:

    from django.conf.urls import url
    from . import views
    urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
    ]

    这个时候会调用views.article_detail(request, year='2003', month='03', day='03'),更加明晰且不容易产生参数顺序问题的错误

    # URL 的反向解析,在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:
    from django.conf.urls import url
    urlpatterns = [
        url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
    ]
    #1.在模板中使用url模板标签。例:<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>
    #2.在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
    在Python 代码中,这样使用:
    from django.core.urlresolvers import reverse
    from django.http import HttpResponseRedirect
    def redirect_to_year(request):
        ...
        year = ***
        return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))
    #3.在处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。
    
    class ModelName(models.Model):
        ...
        def get_absolute_url(self):
            from django.core.urlresolvers import reverse
            return reverse('people.views.details', args=[str(self.id)])
    # 在模板中这样使用,相对于给模型中的每个实例绑定了一个url属性:
    <a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
    # urls中的参数
    #直接第一个匹配的传递给nid,第二个匹配的传递给uid,这样和views里的函数形参位置没有关系了。
    urls.py:url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html/', views.detail),
    views.py:def detail(request, nid, uid):
    #访问网址:127.0.0.1/detail-key1-9.html
    #分组时,个数不确定*args,**kwargs也能使用
    url(r'^detail-(keyd+)-(d+).html/', views.detail), ——> def detail(request, *args):
    url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html/', views.detail), ——> def detail(request, **kwargs):
  • 相关阅读:
    构建一个真实的应用电子商务SportsStore3
    关于计算程序运行时间的方法汇总
    系统分析员备考之CMM篇
    大数据时代的技术hive:hive的数据类型和数据模型
    图片滚动图片的效果
    React初探
    所有的分页查询一览及数据导出(easyui + knouckoutjs + mvc4.0)
    golang微信公众平台之人脸识别
    测试rest接口的两个工具使用详解(restclient+soapUI)
    Linux系统服务基础
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/6529986.html
Copyright © 2011-2022 走看看