victory的博客

长安一片月,万户捣衣声

0%

Django | DTL中的url反向解析

DTL中的url反向解析

反向解析: 根据配置的url来动态生成链接地址
语法: { % url ‘namespace:name’ p1 p2 %}
好处: 如果改变了url配置不需要再去改每一个链接地址

反向解析举例

1.注册应用(settings.py)

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app_name'
)

1.配置主url(project_name/urls.py project_name为项目文件夹)

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('app_name.urls', namespace='app_name'))
]
/*
app_name:创建的应用名,为项目下的应用文件夹
app_name.urls:应用的urls,应用文件夹下的urls.py
*/

2.配置应用url(app_anme/urls.py)

from django.conf.urls import url
import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(\d+)/(\d+)$', views.show, name='show'),
]

3.定义视图(app_name/views.py)
app_name/index.html处于project_name/templates/app_name/

from django.shortcuts import render
from models import *


def index(request):
    context = {}

    return render(request, 'app_name/index.html', context)


def show(request, id1, id2):
    context = {'id1': id1, 'id2': id2}
    return render(request, 'app_name/show.html', context)

4.定义模板
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="{% url 'app_name:show' '123' '456' %}">显示</a>
<hr>
</body>
</html>

show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{id1}}
{{id2}}
</body>
</html>

5.配置模板路径DIRS(settings.py)
模板文件夹templates在project_name文件夹下

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

6.运行服务器,在浏览器地址栏输入 localhost:8000/123/456,请求服务器。