Django - 使用模板显示内容

目录

  • 查看文章页面
    • 使用模板
    • 简化404
  • 文章列表
    • 总urls.py引用子urls.py(article应用的urls.py)

查看文章页面

  • 如何通过一个处理方法获取文章唯一标识
  1. 修改D:\Django\mysite\article 应用里面的views.py
from django.shortcuts import render
from django.http import HttpResponse


# Create your views here.
def article_detail(request, article_id):
    return HttpResponse("文章id: %s" % article_id)
  1. 把访问文章的链接放到总路由urls.py里面
from django.contrib import admin
from django.urls import path
# 导入views
from . import views
# 导入应用里的views里面的article_detail方法
from article.views import article_detail

urlpatterns = [
    ......
    # 文章链接
    # <>里的变量名称要和article_detail定义的变量名称一致
    # 默认变量是str类型, 设置变量为int类型
    # name为别名
    path('article/', article_detail, name="article_detail"),
]
  1. 访问文章里面的数据
    • objects : 模型的objects是获取或操作模型的对象
      • Article.objects.get(条件)
      • Article.objects.all()
      • Article.objects.filter(条件)

Article的views.py

from django.shortcuts import render
from django.http import HttpResponse, Http404
# 应用模型
from .models import Article


# 通过一个处理方法, 响应不同文章链接
# Create your views here.
def article_detail(request, article_id):
    try:
        # 通过文章id获取文章信息
        article = Article.objects.get(id=article_id)
    except Article.DoesNotExist:
        # 返回404
        raise Http404("not exist")
    # 返回文章标题和内容
    # 
表示换行
#

标题标签
return HttpResponse("

文章标题: %s


文章内容: %s"
%(article.title, article.content))

返回数据前端和后端的数据在一起, 不方便维护

使用模板

  • 解析settings.py关于模板的设置
TEMPLATES = [
    {
     
    	# 指定用什么模板系统
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 自己指定目录
        'DIRS': [],
        # APP里面的模板文件夹是有效的, 也就是应用里面的template文件可以读取的到
        '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',
            ],
        },
    },
]
  • 前端页面和后端代码分离减低耦合性
  1. 在应用article文件夹里创建一个文件夹templates
  2. 创建一个html文件
  3. 使用render传数据到html模板文件
    views.py
from django.shortcuts import render
from django.http import HttpResponse, Http404
# 应用模型
from .models import Article


# 通过一个处理方法, 响应不同文章链接
# Create your views here.
def article_detail(request, article_id):
    try:
        # 通过文章id获取文章信息
        article = Article.objects.get(id=article_id)
        # render会产生一个response响应给前端页面
        # render需要三个参数
        # 第一个是 request
        # 第二个是 模板页面地址
        # 第三个是 上传的参数,是一个字典
        context = {
     }
        context["article"] = article
        return render(request, "article_detail.html", context)
    except Article.DoesNotExist:
        # 返回404
        raise Http404("not exist")
  1. 填写数据到html模板文件
<html>
<head>
</head>
<body>
	<h2>{
     {
     article.title}}</h2>
	<p>{
     {
     article.content}}</p>
</body>
</html>

简化404

from django.shortcuts import render, get_object_or_404
# 应用模型
from .models import Article


# 通过一个处理方法, 响应不同文章链接
# Create your views here.
def article_detail(request, article_id):
 
    # 通过文章id获取文章信息
    # article = Article.objects.get(id=article_id)
    # 简化404写法, get_object_or_404有两个参数, 第一个是模型
    # 第二个是条件, 主键可以用pk代替
    article = get_object_or_404(Article, pk=article_id)
    
    # render会产生一个response响应给前端页面
    # render需要三个参数
    # 第一个是 request
    # 第二个是 模板页面地址
    # 第三个是 上传的参数,是一个字典
    context = {
     }
    context['article'] = article
    return render(request, "article_detail.html", context)

文章列表

views.py

from django.shortcuts import render, get_object_or_404
# 应用模型
from .models import Article
.......
 
# 文章列表
def article_list(request):
    article = Article.objects.all()
    context = {
     }
    context['article'] = article
    return render(request, "article_list.html", context)
  • 添加一个html文件
    Django - 使用模板显示内容_第1张图片
    article_list.html
<html>
<head>
head>
<body>
	
	{% for article in articles %}
		
		
		<a href="{% url 'article_detail' article.pk %}">{
    { article.title }}a>
	{% endfor %}
body>
html>
  • 规定一个网址对应此方法
    urls.py
from django.urls import path
# 导入views
from . import views


urlpatterns = [
    # 文章链接
    # <>里的变量名称要和article_detail定义的变量名称一致
    # 默认变量是str类型, 设置变量为int类型
    # name为别名
    path('', views.article_detail, name="article_detail"),
    # 文章列表
    path('', views.article_list, name="article_list"),
]

总urls.py引用子urls.py(article应用的urls.py)

  • 使用include
from django.contrib import admin
from django.urls import include, path
# 导入views
from . import views


urlpatterns = [
    # Django的后台管理地址
    path('admin/', admin.site.urls),
    # path方法有三个参数, 我们这里用到两个参数
    # 第一个参数是访问网址的根目录, ''表示所有路径都可以访问
    # 比如, 直接www.baidu.com
    # 第二个参数规定是如何处理请求, 返回什么给客户端
    # views.index是处理请求的方法
    path('', views.index),
    path('article/', include('article.urls')),
]

总路由器里面设置的是 path('article/', include('article.uls')) 所以子路由里面设置路径的时候, 需要减去 article 这一级目录

你可能感兴趣的:(Django,django)