在扩展名为“blog”的应用程序时,我无法理解下面代码块的作用。我用谷歌搜索但找不到相关的例子。 我有一个名为 post_list.html 的模板文件,它扩展了 base.html ,看起来像
{% extends "blog/base.html" %}
{% block content %}
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
</div>
<h1><a href="{% url "post_detail" pk=post.pk %}">{{ post.title }}</a></h1> #confused part here ??
<p>{{ post.text|linebreaks }}</p>
</div>
{% endfor %}
{% endblock content %}
i dont have post.pk in any model and dont know how it is assigned to "pk" variable
<h1><a href="{% url "post_detail" pk=post.pk %}">{{ post.title }}</a>
</h1>
以下是应用网址和模型的外观
#models.py
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
#views.py
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from .models import Post
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
#urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'),
]
谢谢
答案 0 :(得分:3)
默认情况下,所有django模型都会获得一个名为id
的主键;即使您未在models.py
中指定一个。
.pk
是由django分配的每个模型的automatic generated property,它指的是主键。
使用.pk
的原因是因为无论实际主键字段是什么,它都将始终返回主键值。因此,如果您决定拥有一个拥有自己主键的模型(因此,django不会为您创建一个),.pk
仍然有效。