十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
/usrname/article/1
创新互联公司自2013年起,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元汝州做网站,已为上家服务,为汝州各地企业和个人服务,联系电话:028-86922220
/用户名/article/文章主键值
re_path(r'^(?P\w+)/article/(?P\d+)/$',views.article_detail,name='detail'),
# 七、文章详情页
def article_detail(request,username,article_id):
# 是为了文章详情页站点的标题能够有显示
user_obj = models.UserInfo.objects.filter(username=username).first()
blog = user_obj.blog
# 1.先验证当前的url是否可以使用,以防被上方的url顶替
# return HttpResponse('ok')
# 2.获取当前的文章对象,注意在这之前可以先判断一下用户输入的username、article_id是否存在,不存在保错
# 注意这里需要加一个用户名参数,以防用户名不对时也可以访问到主键为1的文章
article_obj = models.Article.objects.filter(pk=article_id,blog__userinfo__username=username).first()
if not article_obj:
return render(request,'error.html')
return render(request,'article_detail.html',locals())
{% extends 'base.html' %} # 个人站点页面和文章详情页都继承自base页面
{% block content %}
{{ article_obj.title }}
{{ article_obj.content }}
{% endblock %}
这里继承之后,右侧的侧边栏就不见了,需要将侧边栏需要的数据在导入到文章详情的视图函数,但是这往往比较麻烦。
所有,我们可以将文章详情页制成一个inclusion_tag,方便后面需要侧边栏的时候直接导入进行!详见将侧边栏制成inclusion_tag