Django 中url補充以及模板繼承


Django中的URL補充

默認值

在url寫路由關系的時候可以傳遞默認參數,如下:

url(r'^index/', views.index,{"name":"root"}),

這樣在視圖函數中,就可以獲取這個默認參數name:

def index(request,name):
    print(name)
    return  HttpResponse("%s is OK" %name)

命名空間

通過下面例子理解:

在項目的urls里寫入如下代碼:

urlpatterns = [

    url(r'^a/',include("app01.urls",namespace="author"))

]

在app的urls里寫入如下代碼:(注意高亮部分必須有)

app_name = "app01"
urlpatterns = [
    url(r'^index/',views.index,name="index")
]

最后在views視圖函數中寫入如下代碼:

from django.urls import reverse def index(request):
    v = reverse("author:index") print(v)
    return  HttpResponse("is ok")

當訪問頁面

 

 

關於獲取用戶請求信息

 

我們在視圖函數中寫的函數中都加了一個request參數,我們可以通過from django.core.handlers.wsgi import WSGIRequest 導入之后通過request.environ查看詳細的信息

而request.environ是一個字典我們循環之后打印:

 

    for k,v in (request.environ).items():
        print(k,v)

則可以看到整個請求頭的信息

模板繼承

 

 

 

如果自己的網站中每個頁面都有上面這個部分,如果我們在每個頁面都重復寫這段代碼就會很麻煩,並且改動起來也需要每個都改動,為了這種需求,模板繼承可以解決這個問題

把相同的東西寫入到模板中,如果某個部分不同則:

{% block content(這里是自定義名字) %}{% endblock %}

而在要繼承模板的代碼中首先:

{% extends "tp.html" %}  表示要繼承的模板

 

{% block content(這個名字和在模板中定義的名字保持一致) %}

<h1>用戶管理</h1>

{% endblock %}

這樣就繼承了模板中的內容

具體代碼如下:

模板中代碼如下tp.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" href="/static/common.css">
</head>
<body>
    <div class="pg-header">
        我的網站
    </div>
    {% block content %}{% endblock %}
</body>
</html>

tp1.html繼承tp.html代碼如下:

{% extends "tp.html" %}
{% block title %}
    主機管理
{% endblock %}

{% block content %}
<h1>用戶管理</h1>
{% endblock %}

tp2.html繼承tp.html,代碼如下:

{% extends "tp.html" %}
{% block title %}
    用戶管理
{% endblock %}

{% block content %}
<h1>用戶管理</h1>
{% endblock %}

這樣最后登錄tp1和tp2的效果如下:

 

這樣就實現了繼承,但是這里有個問題,如果tp1和tp2中自己想寫自己單獨的css以及js的話,就需要做如下操作:

在head的最下面寫如下代碼:

{% block css %}{% endblock %}

在body的最下面寫如下代碼:

{% block js %}{% endblock %}

 

這樣在tp1以及tp2中就可以自定義自己的css

例如在tp1中添加如下代碼:

 

{% block css %}
    <style>
        body{
            background-color: red;
        }
    </style>

這樣再次訪問tp1.html的時候效果如下,而訪問tp2的時候效果不會發生變化:

 

include

 

當有一些小的標簽很多頁面都需要用到的時候我們可以單獨在一個html中將寫標簽,在tp1中以及tp2中通過include調用

具體如下,新添加一個tag.html,代碼如下:

<form>
    <input type="text">
    <input type="text">
</form>

在tp1.html中代碼如下:

{% block content %}
<h1>用戶管理</h1>
{% include "tag.html" %}
{% endblock %}

這樣最后的效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM