使用Django中的链接

时间:2015-03-17 06:13:24

标签: html django

我正在使用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>

正如您所看到的,每个标题都会创建一个链接。让我们假设一个人决定阅读其中一个帖子。如何使用标题名称并将请求发送回数据库以获取帖子的内容。

2 个答案:

答案 0 :(得分:1)

最好使用idslug字段来执行此类任务。

但是,如果您确定要使用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)