为什么会这样?我按照说明做了一切。我学习。
urls.py
from django.conf.urls import url,include
from django.contrib import admin
from . import views
urlpatterns = [
#url(r'^$',views.main,name="main"),
url(r'^post/(?P<id>[0-9]+)/', views.post_detail, name='post_detail'),
]
views.py
from django.shortcuts import render
from django.utils import timezone
from .models import Post
from django.shortcuts import render, get_object_or_404
# Create your views here.
def post_detail(request,id):
post = get_object_or_404(Post, pk=id)
return render(request, 'main/post_detail.html', {'post': post})
post_detail.html
{% extends 'main/base.html' %}
{% block content %}
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endblock %}
怎么办?即使不是id put pk,也没有任何帮助。
答案 0 :(得分:1)
你的urls.py文件应该可以工作(它适用于我)但你应该用$结束这个网址,以防止在产品ID之后用这个视图匹配网址。
url(r'^post/(?P<id>[0-9]+)/$', views.post_detail, name='post_detail'),
您可以在post_detail
方法中使用pdb来调用:
def post_detail(request,id):
import pdb
pdb.set_trace()
post = get_object_or_404(Post, pk=id)
return render(request, 'main/post_detail.html', {'post': post})
如果调用方法,则执行应在pdb.set_trace()
行停止。您可以按'c'和ENTER恢复它。
pdb非常有用,你应该在遇到问题时先使用它。 (模式详情:https://docs.python.org/2/library/pdb.html)
如果调用方法,如果缺少具有给定id的帖子应该是问题,否则你应该确保来自设置的ROOT_URLCONF
引用该模块。
要检查是否存在此ID:
在django shell中尝试此命令:
Post.objects.get(pk=1)
如果它返回
Post.DoesNotExist
使用以下内容创建此帖子
Post.objects.create(pk=1, **some_values)