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 %}
這樣最后的效果如下: