16 Django URLconf 配置实战

16 Django URLconf 配置实战

在 Django 项目中,URLconf 是处理 HTTP 请求和响应的重要部分。它允许你将 URL 路径映射到相应的视图函数或类视图。本文将指导你如何配置在 Django 中的 URLconf。

创建一个基本的 URLconf

首先,你需要在你的 Django 应用中创建一个 urls.py 文件。如果你已经有了应用,那么可以直接打开这个文件;如果没有,请确保在你的应用目录中创建它。

1
2
3
4
5
6
7
8
9
# myapp/urls.py

from django.urls import path
from . import views

urlpatterns = [
path('', views.index, name='index'), # 首页
path('about/', views.about, name='about'), # 关于页面
]

在这个例子中,我们定义了两个路径:

  • ''(根路径)对应 index 视图
  • 'about/' 对应 about 视图

name 参数允许你通过命名访问这些 URL,这在反向解析 URL 时非常有用。

主 URLconf 配置

在你的项目目录中,通常会有一个 urls.py 文件,你需要在这里包含应用的 URLconf。

1
2
3
4
5
6
7
8
9
# myproject/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')), # 引入 myapp 的 URLconf
]

这里使用了 include() 函数将 myapp 的 URLconf 绑定到 /myapp/ 路径下。这意味着,访问 http://yourdomain/myapp/ 将会查找 myapp/urls.py 中定义的路径。

URL 参数

你还可以在 URL 中传递参数,例如一个文章的 ID。配置方式如下:

1
2
3
4
5
6
# myapp/urls.py

urlpatterns = [
path('', views.index, name='index'),
path('article/<int:id>/', views.article_detail, name='article_detail'), # 文章详情页
]

这样,访问 http://yourdomain/myapp/article/1/ 将会把参数 1 传递给 article_detail 视图。

在视图函数中,你可以这样获取参数:

1
2
3
4
5
6
7
8
# myapp/views.py

from django.shortcuts import render

def article_detail(request, id):
# 假设你有一个 Article 模型来获取文章
article = Article.objects.get(pk=id)
return render(request, 'myapp/article_detail.html', {'article': article})

正则表达式 URLconf

有时,你可能需要更复杂的 URL 模式,可以使用正则表达式来定义 URL。这需要用到 re_path

1
2
3
4
5
6
7
# myapp/urls.py

from django.urls import re_path

urlpatterns = [
re_path(r'^article/(?P<id>\d+)/$', views.article_detail, name='article_detail'),
]

这里的 (?P<id>\d+) 定义了一个名为 id 的捕获组,用于匹配一个或多个数字。

小结

通过以上配置,你现在应该能够对 Django 的 URLconf 有基本的了解。它将 URL 模式映射到视图,使得处理请求时更加灵活。接下来,你可以在此基础上构建更复杂的路由逻辑,以满足你的项目需求。

17 Django视图与模板的结合

17 Django视图与模板的结合

在Django中,视图(Views)和模板(Templates)是构建Web应用的核心部分。视图处理请求并返回响应,而模板用于渲染输出到客户端的HTML页面。下面将通过示例详细介绍如何结合视图与模板。

创建视图

首先,我们需要创建一个视图来处理请求。视图可以是函数视图或类视图。在本例中,我们使用函数视图。

1
2
3
4
5
6
7
8
9
10
11
12
# views.py

from django.shortcuts import render

def home(request):
# 添加上下文数据
context = {
'title': '欢迎来到我的网站',
'message': '这里是Django视图与模板结合的示例。',
}
# 使用render函数携带上下文数据渲染模板
return render(request, 'home.html', context)

解析代码

  • render 是一个快捷函数,它将请求对象、模板名称,以及上下文数据作为输入参数。
  • 上下文数据以字典形式传入,可以在模板中访问。

创建模板

接下来,我们需要创建home.html模板来显示视图传递的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- templates/home.html -->

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ message }}</p>
</body>
</html>

解析模板

  • 模板中的 {{ title }}{{ message }} 是 Django 模板语言(DTL)的语法,用于插入上下文中的数据。

配置URL

现在,我们需要将视图与URL结合。打开urls.py并进行如下配置。

1
2
3
4
5
6
7
8
# urls.py

from django.urls import path
from .views import home

urlpatterns = [
path('', home, name='home'),
]

解析URL配置

  • 我们将根URL('')映射到 home 视图,从而当用户访问首页时,home 视图将被调用。

完整示例

将以上步骤结合起来,你的项目结构可能如下所示:

1
2
3
4
5
6
7
8
9
myproject/
├── myapp/
│ ├── templates/
│ │ └── home.html
│ ├── views.py
│ └── urls.py
├── myproject/
│ └── urls.py
└── manage.py

运行项目

确保你的Django项目运行正常,可以通过以下命令启动开发服务器:

1
python manage.py runserver

然后在浏览器中访问 http://127.0.0.1:8000/ ,你将看到模板渲染的页面。

示例总结

通过本教程,我们展示了:

  • 如何创建视图并传递上下文数据。
  • 如何使用模板来渲染数据。
  • 如何配置URL以响应请求。

这种结合使得开发者能够将业务逻辑与用户界面分离,从而提高了代码的可读性和可维护性。继续探索Django强大的功能,将使你的项目更加高效!

18 Django 模板语言基础

18 Django 模板语言基础

在 Django 中,模板语言是用于生成动态 HTML 的一种强大工具。掌握 Django 模板语言的基本概念和用法,有助于快速开发出功能丰富、用户友好的 web 应用。

模板的基本结构

Django 模板是由 HTML 和模板标签组成的文件。模板标签用 {% %} 包裹,纯文本内容则直接写在 HTML 中。

示例模板

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>我的 Django 应用</title>
</head>
<body>
<h1>欢迎来到我的 Django 应用</h1>
</body>
</html>

变量的使用

在模板中,可以通过双花括号 {{ }} 来引用变量。例如,如果我们在视图中传递了一个变量 name,可以在模板中这样使用:

1
<h1>欢迎, {{ name }}!</h1>

视图代码示例

1
2
3
4
from django.shortcuts import render

def index(request):
return render(request, 'index.html', {'name': '用户'})

控制结构

if 语句

你可以使用 {% if %} 标签来进行条件判断。例如,判断用户是否登录:

1
2
3
4
5
{% if user.is_authenticated %}
<p>欢迎回来, {{ user.username }}!</p>
{% else %}
<p>欢迎光临,请先登录。</p>
{% endif %}

for 循环

使用 {% for %} 标签可以遍历一个列表。例如,展示一个文章列表:

1
2
3
4
5
6
7
<ul>
{% for article in articles %}
<li>{{ article.title }}</li>
{% empty %}
<li>没有文章可显示。</li>
{% endfor %}
</ul>

视图代码示例

1
2
3
def article_list(request):
articles = Article.objects.all()
return render(request, 'article_list.html', {'articles': articles})

过滤器

Django 提供了多种过滤器,用于格式化变量。使用 | 符号来应用过滤器。例如,将文本转换为大写:

1
<p>{{ name|upper }}</p>

常用的过滤器包括:

  • date:格式化日期
  • length:获取列表长度
  • default:提供默认值

示例

1
2
<p>当前时间: {{ current_time|date:"Y-m-d H:i:s" }}</p>
<p>文章数量: {{ articles|length }}</p>

自定义标签和过滤器

如果内置的标签和过滤器无法满足需求,可以自定义它们。创建一个标签库,首先在你的应用目录下创建一个 templatetags 文件夹,并添加 __init__.py 和自定义标签文件。

1
2
3
4
5
6
7
8
# myapp/templatetags/custom_tags.py
from django import template

register = template.Library()

@register.filter
def add_suffix(value, suffix):
return f"{value}{suffix}"

在模板中使用自定义标签:

1
2
{% load custom_tags %}
<p>{{ title|add_suffix:" - 我的博客" }}</p>

模板继承

Django 的模板继承机制允许你创建一个基础模板,其他模板可以在此基础上进行扩展。使用 {% extends %}{% block %} 定义和使用模板块。

基础模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- base.html -->
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>{% block title %}我的网站{% endblock %}</title>
</head>
<body>
<header><h1>网站头部</h1></header>
<main>
{% block content %}{% endblock %}
</main>
<footer><p>网站底部</p></footer>
</body>
</html>

子模板

1
2
3
4
5
6
7
8
<!-- index.html -->
{% extends "base.html" %}

{% block title %}首页{% endblock %}

{% block content %}
<h2>欢迎来到首页</h2>
{% endblock %}

总结

通过学习 Django 模板语言的基础知识,你可以有效地在项目中处理动态内容。掌握变量、控制结构、过滤器、自定义标签和模板继承的使用,将帮助你构建出复杂而富有表现力的网页。随着对 Django 框架的深入了解,你将能够进一步扩展和优化你的应用。