zoukankan      html  css  js  c++  java
  • 115-django中,关于incluede,namespace(app_name),和url的name属性

    从115开始,之后的示例,都基于一个叫KNote的项目!

    假设我们建立了一个项目:KNote,其下暂时只有一个APP:notebook。要访问notebook下的某个页面,按照工程的层级结构来说,是project——》app,记住这个层级关系!

    第一部分,关于include

    建立KNote项目后,在根目录下直接会有一个urls.py文件,这将是之后所有页面的一级入口,包括admin后台,如果要访问某个app下面的页面,通常使用路由的方式,即:include。

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('nb/', include('notebook.nb_urls')),
    ]  

    第一个path毫无疑问,是指向admin后台的,第二个path,指向notebook下的二级urls文件。

    在什么情况下会只指向notebook下的urls,当用户的网址用输入了xxx/nb/之后,比如http://127.0.0.1:8000/nb/...

    如果nb后面还有其他内容,会去nb_urls这个文件去匹配。

    from django.urls import path
    from . import views
    
    app_name = 'notebook'
    urlpatterns = [
        path('start_page/', views.start_page, name='start_page'),
        path('note/<int:pk>', views.one_note, name='one_note'),
    ]
    

    如果输入的是nb/start_page/,会运行views.py文件里的start_page函数,注意:此时,即便没有后面的name='start_page',也不影响运行。如果是用户输入的网址里的内容,通过直接会用path里的第一部分进行匹配。

    第二部分,关于app_name和url的name属性

    要前往某个网页,并不总是通过地址栏输入然后敲回车键实现的。很多情况下,是在一个网页里,点击一个链接,然后打开另外一个页面。此时就不能用path的第一部分来匹配了,需要使用url的name属性。

    假设有如下场景:在首页列举最新的10篇文章的摘要,然后给这10篇文章添加链接,使可以显示这篇文章的完整内容。

    这个流程的第一步是10篇文章的摘要页面:

        <div>
            {% for note in ten_note %}
            <h3><a href="{% url 'notebook:one_note' note.pk %}">{{note.title}}</a></h3>
            <p>Create time:{{note.pub_time}} Update time:{{note.update_time}}</p>
            {% autoescape off %}
            <p>{{note.content|truncatechars:128}}</p>
            {% endautoescape %}
            <p>{{note.personal_tags.all}}</p>
            {% endfor %}
        </div>
    

      

    通过上下文传入的ten_note,是处理过的数据,文章列表的一个切片:最近10篇。通过for选择一个,然后把各种内容呈现出来,然后再依次显示后面9篇。

    1. title,添加了链接
    2. 显示创建时间和更新时间
    3. 显示最近128字的摘要,并且关掉转义,因为这里面集成了富文本模块
    4. 显示标签

    关于title里的链接:

    <a href="{% url 'notebook:one_note' note.pk %}">{{note.title}}</a>

    格式为(不要用逗号,全部是空格):

    url关键字,

    一个url命名空间:此空间里的某个url的名称,

    要传入的参数(可选)。

    联合起来表示为:到这个namespace(app_name)里的url文件里,找name='one_note'的path,并且给他传个参数。

    也就是对应这个path:

    path('note/<int:pk>', views.one_note, name='one_note'),

    注意,这个namespace(app_name)的写法,它当前写作notebook,但其实可以和这个app的name不一样,只要模板里的名称,和app的urls的名称一致即可。查看前文的红色字部分。

    
    
    

      

  • 相关阅读:
    JedisConnectionException: java.net.ConnectException: Connection refused
    启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
    JAVA 判断一个字符串是不是一个合法的日期格式
    升级openssl
    Linux操作路由
    Linux的用户行为审计
    升级gdb
    Linux的运行级别
    sudo的用法
    Linux缓存清理
  • 原文地址:https://www.cnblogs.com/lzhshn/p/13487051.html
Copyright © 2011-2022 走看看