0
我是Django的新手,并且一直在制作示例项目。我一直在尝试使用通用的Detailview。看来,URL重定向工作正常,但DetailView无法从URL获取主键。Django URL映射问题/ DetailView
主要url.py::
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^',include('personal.urls')),
]
这里是我的应用程序的urls.py代码:为的DetailView
urlpatterns = [
url(r'(?P<pk>\d+)/$',views.detailView.as_view(),name="detail"),]
查看文件:
from django.shortcuts import render
from django.views import generic
from .models import Story
class detailView(generic.DetailView):
model = Story
template_name = 'personal/storydetail.html'
def get_context_data(self, **kwargs):
pk = kwargs.get('pk') # this is the primary key from your URL
print("PK:",pk)
模板代码:
{% block content %}
{{ Story.writer }}
<h6> on {{ Story.story_title }}</h6>
<div class = "container">
{{ Story.collection }}
</div>
{% endblock %}
故事类代码:
class Story(models.Model):
story_title = models.CharField(max_length=200) #Story title
writer = models.CharField(max_length=200) #WriterName
collection=models.CharField(max_length=200) #Collection/Book name
当我在视图检查主键值它表明它 'NONE'。我找不到代码的问题。我的网址如下所示:http://127.0.0.1:8000/personal/2/其中personal是应用程序的名称,2应被视为id。
我的问题似乎没有明确。当我使用它检查主键时,它显示pk为空,这就是为什么我没有得到任何pk的问题 –
我不确定你是否理解我的答案。你问题中的代码是不同的。你正在检查'kwargs'。你需要检查'self.kwargs'。 – Alasdair
'Story'(大写)是班级。在'DetailView'(和一般的Python)中,模型实例是'story'(小写)。改变你的模板使用'{{story.writer}}'等等。如果你重写'get_context_data',确保你调用'super()',就像我在我的答案中一样,否则你会打破视图。最后,最好将您的视图命名为'DetailView'而不是'detailView'以匹配Django约定。 – Alasdair