我正在使用Django在一个小博客应用程序中工作。对不起,如果问题很明显,但我是新手。实际上这是我开始在线课程以来的第三次。我有以下Queryset:
def all(request):
allTiles = Post.objects.values('title')
allPosts = Post.objects.all()[:3]
context = {'Posts': allPosts,"Titles":allTiles}
template = "home.html"
return render(request, template, context)
和以下的HTML代码:
<ol class="list-unstyled">
{% for singleTile in Titles %}
<li><a href="#">{{singleTile.title}}</a></li>
{% endfor %}
</ol>
正如您所看到的,每个标题都会创建一个链接。让我们假设一个人决定阅读其中一个帖子。如何使用标题名称并将请求发送回数据库以获取帖子的内容。
答案 0 :(得分:1)
最好使用id
或slug
字段来执行此类任务。
但是,如果您确定要使用title
作为GET参数,请将urlencode过滤器应用于字段的值:
<a href="{% url 'post_detail' %}?title={{ singleTile.title|urlencode }}">
{{ singleTile.title }}
</a>
视图将是这样的:
def post_detail(request):
post = get_object_or_404(Post, title=request.GET.get('title'))
return render(request, 'post_detail.html', {'post': post})
更新:如果您决定使用id
/ slug
选项,则可以使用通用DetailView:
<a href="{% url 'post_detail' singleTile.id %}">
{{ singleTile.title }}
</a
<强> urls.py 强>:
from django.views.generic.detail import DetailView
from app.models import Post
url(r'^post/(?P<pk>\d+)/$', DetailView.as_view(model=Post),
name='post_detail')
答案 1 :(得分:0)
您必须首先配置网址,如
<a href="#">{% url 'app.views.post_id' singleTile.id %}</a></li>
在你的网址
url(r'^post/(?P<post_id>\d+)/$', views.by_id, name='post_id'),
在你的观点中
def post_id(request, post_id):
allTiles = Post.objects.get(id=post_id)
return render(request, template, context)