zoukankan      html  css  js  c++  java
  • django路由系统

    伪静态

    网站形态分两种,静态和动态,伪静态并不是真正的静态,实质上也是动态页面。

    动态页面的含意就是,网页会根据访问者的请求,从服务器数据库里筛选访问者想要的内容显示到访问者的浏览器上,不同的人访问同一页面,会看到不同的内容

    静态页面,访问者访问一个页面,会直接从服务器把这个页面读出来显示到访问者的浏览器里,不需要数据库的支持。

    伪静态页面,其目的是为了更好的被搜索引擎收录而通过一定的规则,把动态页面的地址转换成以htm或html结尾的地址,看起来是静态的,实际是依然是动态页面。

    网址匹配中自己添加.html。这样访问时网页就会有.html
    
    url(r'^product.html', views.product.product, name='product'),
    url(r'^index/(w+)/(w+)/'.html, index),
    url(r'^test/(?P<id>w+)/(?P<name>w+)/', test),

    路由分发

    总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系

    路由配置: 路径-->视图函数 (哪个路径,交给哪个函数处理)

    在路径也就是一级url中配置一级路由,前面依然使用正则来匹配,这组路由指向二级路由的地址
    首先导入include模块,其次确保app下有urls文件
    from django.conf.urls import url, include
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^classes/', include('classes.urls')),
    url(r'^teacher/', include('teacher.urls')),
    url(r'^student/', include('student.urls')),

    url(r'^login/', include('login.urls')),

    url(r'',not_found)
    ]
     

    视图也就是二级路由指向具体的位置

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^classes/', views.classes),
        url(r'^cadd/', views.cadd),
        url(r'^del_c/', views.del_c),
        url(r'^up_c/', views.up_c),
    ]

    反向路由

     随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超链接忘记修改,有办法让链接根据正则表达式动态生成吗? 就是用反向解析的办法。

    定义url时,需要为include定义namespace属性,为url定义name属性,通过这个name参数,可以反向解析URL、反向URL匹配、反向URL查询或者简单的URL反查。

    使用时,在模板中使用url标签,在视图中使用reverse函数,根据正则表达式动态生成地址,减轻后期维护成本。

    在需要解析URL的地方,对于不同层级,Django提供了不同的工具用于URL反查:

    • 在模板语言中:使用url模板标签。(也就是写前端网页时)

    • 在Python代码中:使用reverse()函数。(也就是写视图函数等情况时)

    • 在更高层的与处理Django模型实例相关的代码中:使用get_absolute_url()方法。(也就是在模型model中)

    使用

    urlpatterns = [
        #...
        path('articles/<int:year>/', views.year_archive, name='news-year-archive'),
        #...
    ]

    在前端想要使用这一条路由的时候(在前端解析)

    <a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>
    {# Or with the year in a template context variable: #}
    <ul>
    {% for yearvar in year_list %}
    <li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
    {% endfor %}
    </ul>

    在后端视图函数中使用

    from django.urls import reverse
    
    def redirect_to_year(request):
        # ...
        year = 2019
        # ...
        return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))

     

  • 相关阅读:
    CODEVS 3137 栈练习1
    CODEVS 3138 栈练习2
    线段树———模板
    深度优先搜索与广度优先搜索———模板
    犯罪团伙 codevs 3554
    嘟!数字三角形 W WW WWW集合!
    寻找子串位置 codevs 1204
    流输入练习——寻找Sb.VI codevs 3096
    C++之路进阶——codevs3287(货车运输)
    c++之路进阶——codevs4543(普通平衡树)
  • 原文地址:https://www.cnblogs.com/duGD/p/11192148.html
Copyright © 2011-2022 走看看