Django - 使用模板显示内容

查看文章页面

  • 如何通过一个处理方法获取文章唯一标识
  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定义的变量名称一致
    # <article_id>默认变量是str类型, <int:article_id>设置变量为int类型
    # name为别名
    path('article/<int:article_id>', 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")
    # 返回文章标题和内容
    # <br>表示换行
    # <h1></h1>标题标签
    return HttpResponse("<h2>文章标题: %s</h2><br>文章内容: %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文件
    在这里插入图片描述
    article_list.html
<html>
<head>
</head>
<body>
	<!--for循环-->
	{% for article in articles %}
		<!--
		第一种方法 : 
		<a href="/article/{{ article.pk }}">{{ article.title }}</a>
		-->
		<!--
		第二种方法 : 使用别名
		-->
		<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定义的变量名称一致
    # <article_id>默认变量是str类型, <int:article_id>设置变量为int类型
    # name为别名
    path('<int:article_id>', 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 这一级目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值