Django 再次學習筆記整理
阿新 • • 發佈:2019-02-05
() red lse per else cut 標簽 字典 模板語言
url 路由系統
urlpatterns = [ # path(‘admin/‘, admin.site.urls), path(‘index/‘, views.index), re_path(‘^edit/(\w+)/$‘,views.edit1), # 加上 $ re_path(‘^edit/(\w+).html$‘,views.edit2), # 如果前面不加結尾符,則不能匹配此url re_path(‘^edit/(?P<a2>\w+)/(?P<a1>\w+).html$‘,views.edit3), # 按參數名傳參 # def edit3(request,*args,**kwargs): # 不要將(\w+)與(?P<a2>\w+)混用 path(‘index2/‘, views.index2,name=‘n2‘),# 給url命名;在函數中通過別名反找到url from django.urls import reverse def index2(request): v = reverse(‘n2‘) return HttpResponse(v) # 通過別名反找到url,反生成url re_path(‘index3/(\w+)‘, views.index3,name=‘n3‘), # 可隨意生成(\w+)位置的值 def index3(request,*args): v = reverse(‘n3‘,args=(123,)) # 請求url:index3/3 生成url:index3/123 # 有多少(\w+),args=(,)就寫多少個參數 return HttpResponse(v) re_path(‘^index4/(?P<a2>\w+)/(?P<a1>\w+).html$‘, views.index4,name=‘n4‘),# 可隨意生成(?P<a2>\w+)位置的值 def index4(request,**kwargs): v = reverse(‘n4‘,kwargs={‘a2‘:666,‘a1‘:777)) # # 請求url:index4/4/3 生成url:/index4/666/777.html # 有多少(?P<a2>\w+),kwargs={,}就寫多少個鍵值對 return HttpResponse(v) re_path(‘^‘, default) # 此規則放最後 # 什麽都不輸或者輸錯了,將會被匹配 # def default(request):return HttpResponse(‘url 錯誤‘) ]
若是給url命名,在templates模板中可以直接使用名字{% url ‘m1‘ %} path(‘index10/‘, views.index10,name=‘m1‘), <form method="post" action="{% url ‘m1‘ %}"> # -><form method="post" action="/index10/"> re_path(‘index10/(\w+)/‘, views.index10,name=‘m2‘), <form method="post" action="{% url ‘m3‘ ‘abc‘ %}"> # "補位"
路由分發: urls.py分配url到app from django.urls import path,re_path,include urlpatterns = [ path(‘app01/‘, include(‘app01.urls‘)), # 只匹配開頭,然後交與app01中的urls繼續匹配 # 請求url為 http://127.0.0.1:8000/app01/index/ # -> 先匹配到app01 -> app01下的urls中匹配index ] 在app01.urls.py文件下匹配url from django.urls import path,re_path from app01 import views urlpatterns = [ path(‘index/‘, views.index), ] from django.urls import path,re_path, re_path(r‘^ip/‘, ([ re_path(‘^$‘, daili.display), re_path(‘^page_(\d)/$‘, daili.display), # *args re_path(‘^page_(?P<page>\d)/$‘, daili.display) # **kwargs ], None, None)), CBV: path(‘login.html‘,views.Login.as_view()), from django.views import View class Login(View): def get(self,request): return HttpResponse(‘Login.get‘)
模板語言
# 訪問對象的屬性,可以直接用.點出需要的值 {{ obj.id }} # 訪問字典用dict.key {{ dict.key }} # 訪問元組用tuple.0 索引 {{ tuple.1 }} {% url %} 引用路由配置的地址,url的反向解析; {% url ‘name‘ %} {% csrf_token %} # 防止跨站攻擊,一般只在表單POST提交的時候添加; # 其實,這裏會生成一個input標簽,將csrf的數據的信息以鍵值對的方式提交後臺; # 循環 {% for item in item_list %} <a>{{ item }}</a> {{ forloop.counter }} {{ forloop.first }} {{ forloop.last }} {% endfor %} # if else {% if ordered_warranty %} 。。。 {% else %} ... {% endif %} 母板:{% block title %}{% endblock %} 子板:{% extends "base.html" %} {% block title %} 在此嵌入內容 {% endblock %} 幫助方法: # 字母大寫 {{ temp|upper}} # 在temp的基礎上加3 {{ temp|add:3 }} # 按空格切割 {{ temp|cut:‘‘ }} # 以固定格式輸出時間 {{ temp|date:"Y-m-d H:i:s"}} # 內容如果為空,默認輸出引號後面的內容 {{ temp|default:‘空的‘}} # 將html的字符串轉為html標簽顯示出來 {{ temp|safe }} 自定義模板語言函數 創建templatetags目錄,在其下創建xxx.py文件 使用特殊方法要先導入:{% load xx %} xxx.py from django import template register = template.Library() @register.filter # 只能有2個參數 def my_func(value,arg): return value+arg {{ name|my_func:"666"}} # 冒號後不能有空格 {%if name |my_func%} 〈h3〉真〈/h3〉 {%else%} 〈h3〉假</h3〉 {%endif%} #register.simple_tag # 可傳多個參數 def my_func(value,a1,a2,a3): return value+a1+a2+a3 {% my_func "a11" "a222" "a333" %} 小組件,可在頁面多次加載,可不用{% load xx %}導入 {% include ‘pub.html‘ %} pub.html <div> <h3>特別漂亮的組件</h3> <div class="title">標題:{{ name}}</div> <div class="content">內容:{{ name}}</div> </div> index.html <body>{% include ‘pub.html‘ %}
Django 再次學習筆記整理