Django在模板中迭代以逗号分隔的列表

时间:2014-04-02 20:46:28

标签: django

我的Django项目有一个“标签”字段,用户可以在其中添加标签。目前,它存储在我的模型中的models.CharField(max_length = 200)字段中。

我想要做的就是在显示帖子时,每个单词都打印有自己的URL,以按特定标记对帖子进行排序。例如,每个帖子还有一个“类别”模型.CharField,他们可以从下拉列表中选择一个类别,该列表在帖子中成为一个URL。

例如在我的Views.py中:

@login_required
def category(request, category):
    thisuser = request.user
    if request.method == "POST":
        category = request.POST['category']
    else:
        category = ''
    following = Follow.objects.filter(follower=thisuser).order_by('-pubdate')
    followers = Follow.objects.filter(who_following=thisuser).order_by('-pubdate')

    posts = Post.objects.filter(category__contains=category)

    args = {'posts': posts, 'thisuser': thisuser, 'following': following, 'followers': followers}
    args.update(csrf(request))

    args['category'] = category

    return render_to_response('lobby.html', args)

并在我的模板中:

<a href="/lobby/posts/category/{{post.category|lower}}/">Category: {{post.category}}</a>

是否有{%for%}模板标记我可以使用逗号分隔标记字段中的值,然后将每个标记渲染为自己的实例?或者我是否还需要做其他事情,例如为Tags制作关系数据库(因为帖子可以有多个标签),然后通过Post ID迭代它们?

2 个答案:

答案 0 :(得分:3)

数据库设计方面,最好的选择是为Tags提供单独的模型。这样您就可以更轻松地按标签搜索/排序/过滤。

但是,如果你需要一个快速解决方案,那么你必须推动这个&#34;用逗号分隔&#34;您的视图/模型的逻辑,如下所示:

class Post(models.Model):
    tags = models.CharField(...)

    def split_tags(self):
        return self.tags.split(',')


# in your template:
{% for tag in post.split_tags %} {{ tag }} {% endfor %}

答案 1 :(得分:1)

您应该执行类似

的操作
class Post(models.Model):
    def categories(self):
        return self.category.split(',')

然后

{% for category in post.categories %}

但我强烈建议在你的情况下使用m2m关系。您可以使用像django-taggit这样的应用来帮助您。