• 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):
  • 相关阅读:
    rabbitmq fanout模式(发布订阅)
    rabbitmq php 限流
    rabbitmq 延迟队列 php
    rabbitmq 死信队列 php
    php rabbitmq发送消息并判断消息是否发送成功 ack comfirm机制
    php使用activemq
    golang 冒泡排序实现
    依耐项属性- 在需要使用的情况下添加
    Path 详解 之WPF
    WPF FrameWorkElement->UIElement->Visual
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/6529986.html
Copyright © 2020-2023  润新知