IT评测·应用市场-qidao123.com技术社区

标题: Django视图(未分离) [打印本页]

作者: 悠扬随风    时间: 2025-4-18 19:28
标题: Django视图(未分离)
ListView、DetailView、CreateView、UpdateView 和 DeleteView 是 Django 框架中基于类的通用视图(Class-Based Generic Views)
 设置 URL 路由
在 urls.py 中为这些视图设置路由:
  1. from django.urls import path
  2. from .views import (
  3.     PostListView,
  4.     PostDetailView,
  5.     PostCreateView,
  6.     PostUpdateView,
  7.     PostDeleteView,
  8. )
  9. urlpatterns = [
  10.     path('', PostListView.as_view(), name='post-list'),  # 文章列表页
  11.     path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),  # 文章详情页
  12.     path('post/new/', PostCreateView.as_view(), name='post-create'),  # 创建新文章
  13.     path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),  # 更新文章
  14.     path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),  # 删除文章
  15. ]
复制代码
1. ListView


  1. from django.urls import reverse_lazy
  2. from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
  3. from .models import Post
  4. # 显示所有文章的列表
  5. class PostListView(ListView):
  6.     model = Post
  7.     template_name = 'blog/post_list.html'  # 自定义模板路径
  8.     context_object_name = 'posts'  # 自定义上下文变量名
复制代码
  1. <h1>文章列表</h1>
  2. <a href="{% url 'post-create' %}">新建文章</a>
  3. <ul>
  4.     {% for post in posts %}
  5.         <li>
  6.             <a href="{% url 'post-detail' post.pk %}">{{ post.title }}</a>
  7.             <a href="{% url 'post-update' post.pk %}">编辑</a>
  8.             <a href="{% url 'post-delete' post.pk %}">删除</a>
  9.         </li>
  10.     {% endfor %}
  11. </ul>
复制代码


2. DetailView


  1. # 显示单篇文章的详细信息
  2. class PostDetailView(DetailView):
  3.     model = Post
  4.     template_name = 'blog/post_detail.html'  # 自定义模板路径
  5.     context_object_name = 'post'  # 自定义上下文变量名
复制代码
  1. <h1>{{ post.title }}</h1>
  2. <p>{{ post.content }}</p>
  3. <p>发布时间: {{ post.created_at }}</p>
  4. <a href="{% url 'post-list' %}">返回列表</a>
复制代码


3. CreateView


  1. # 创建新文章
  2. class PostCreateView(CreateView):
  3.     model = Post
  4.     template_name = 'blog/post_form.html'  # 自定义模板路径
  5.     fields = ['title', 'content']  # 表单中需要显示的字段
  6.     success_url = reverse_lazy('post-list')  # 成功后跳转到文章列表页
复制代码
  1. <h1>{% if object %}编辑文章{% else %}新建文章{% endif %}</h1>
  2. <form method="post">
  3.     {% csrf_token %}
  4.     {{ form.as_p }}
  5.     <button type="submit">保存</button>
  6. </form>
  7. <a href="{% url 'post-list' %}">取消</a>
复制代码

4. UpdateView



  1. # 更新现有文章
  2. class PostUpdateView(UpdateView):
  3.     model = Post
  4.     template_name = 'blog/post_form.html'  # 自定义模板路径
  5.     fields = ['title', 'content']  # 表单中需要显示的字段
  6.     success_url = reverse_lazy('post-list')  # 成功后跳转到文章列表页
复制代码
5. DeleteView



  1. # 删除文章
  2. class PostDeleteView(DeleteView):
  3.     model = Post
  4.     template_name = 'blog/post_confirm_delete.html'  # 自定义模板路径
  5.     success_url = reverse_lazy('post-list')  # 成功后跳转到文章列表页
复制代码

  1. <h1>确认删除文章 "{{ object.title }}" 吗?</h1>
  2. <form method="post">
  3.     {% csrf_token %}
  4.     <button type="submit">确认删除</button>
  5. </form>
  6. <a href="{% url 'post-list' %}">取消</a>
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4