查看django文章页面

怎样获取文章唯一标识

在view里定义

def article_detail(request,article_id):
    return HttpResponse("文章id:%s"% article_id)

前边注意引用HttpReponse

在url里定义

  path('article/<int:article_id>',article_detail,name="article_id"),

这时运行起来会显示这样的
在这里插入图片描述
其中的id可以更改

接下来通过id显示文章内容
这时就需要用到一个django模型配套的东西,引用models里边的模型(Article)
接下来通过模型id找到对应的内容,此时需要涉及到另一个东西,objects
在这里插入图片描述
那么在article/views里

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:
        article = Article.objects.get(id = article_id)
    except Article.DoesNotExist:
        raise Http404("not exist") #raise抛出去的意思
    return HttpResponse("<h2>文章标题:%s</h2> <br>文章内容:%s"%(article.title ,article.content))

其中呢,要是想加入HTML代码修饰的话,则需要引入一个代码块

使用模板

前端页面和后端代码分离,降低耦合性

在template文件夹里创建html文件
在这里插入描述
返回模板的话需要用到render函数
那么之前代码里的这一句就可以注释掉或者删掉

return HttpResponse("<h2>文章标题:%s</h2> <br>文章内容:%s"%(article.title ,article.content))

代码就会改成


def article_detail(request,article_id):
    try:
        article = Article.objects.get(id = article_id)
        context = {}
        context ['article_obj'] = article
        return render(request,"article_detail.html",context)
    except Article.DoesNotExist:
        raise Http404("not exist") #raise抛出去的意思
#    return HttpResponse("<h2>文章标题:%s</h2> <br>文章内容:%s"%(article.title ,article.content))

另外呢,还有另外一种方法表示,即使用get_object_or_404模板
这个模板的定义在python安装目录里
()里填写模型和条件即可
在这里插入图片描述
改之后的代码即为

from django.shortcuts import get_object_or_404 #render没有再使用,所以可以去掉
#from django.http import HttpResponse,Http404
from .models import Article
# Create your views here.
def article_detail(request,article_id):
#    try:
#        article = Article.objects.get(id = article_id)
        article = get_object_or_404(Article,pk=article_id)#pk即为主键的缩写
        context = {}
        context ['article_obj'] = article
        return render(request,"article_detail.html",context)
#    except Article.DoesNotExist:
#       raise Http404("not exist") #raise抛出去的意思
#    return HttpResponse("<h2>文章标题:%s</h2> <br>文章内容:%s"%(article.title ,article.content))

获取文章列表

在这里插入图片描述
需要创建一个专门的处理方法
再次def一个article_list,同时在url里定义一下

def article_list(request):
    articles = Article.objects.all()
    context = {}#创建一个字典
    context ['articles'] = articles
    return render(request, "article_list.html", context)

在总url里定义一下

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),
    path('article/<int:article_id>',article_detail,name="article_detail"),
    path('article/',article_list,name="article_list"),
]

其实呢,这个url其实是article里的url,那么我们就可以把它放到article里的url里
注意,article里没有url文件,所以需要再重新创建一个
创建后的url文件内容如下

from django.urls import path
from . import  views #此时的views在同一目录下,用"."结构引用就行

urlpatterns = [
    path('<int:article_id>',views.article_detail,name="article_detail"),
    path('',views.article_list,name="article_list"),#注意,之前的   ('' )是包含有article的,路径和总url里的路径重复了,所以这里就不能再写了
]

总url文件里的代码如下

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


urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),
    path('article/',include('article.urls')),#使用include函数,引用app里的url,前边定义有article路径,所以在app路径里就不再需要写这个article路径
]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值