我正在使用查询集检索一堆内容并将其显示为列表,然后可单击以查看所选文章的详细信息。 所以在文章的详细信息视图中,我有一个is_creator方法:
@login_required
def is_creator(userProfile, article):
if userProfile == article.creator:
return True
else:
return False
所以我可以随意显示一个编辑按钮。 但是在主页上,这是一个不同的故事,因为我正在进行查询,并将查询集直接提供给将使for循环显示标题的模板。如果当前用户是创建者,我仍然想知道每篇文章。
所以我正在考虑在模型中添加工作,而不是在任何地方重复代码。
@property
def is_creator(self,user):
if self.creator.user == user:
return 1
else:
return 0
我在想通过在模型中添加它,我应该能够非常轻松地调用模板{%if event.is_creator user%} test {%endif%}。似乎我错了,因为我正面临着:
TemplateSyntaxError at /
Unused 'user' at end of if expression.
我来自PHP世界,所以感觉这应该有效,但我显然做错了什么。
提前致谢:)
编辑:我猜测另一种解决方案是在视图中循环使用类似的东西:
variables['articles'] = Event.objects.filter(
(Q(creator=me) | Q(bringing__attendee=me)) & Q(date_start__lt=datenow) & Q(date_end__gt=datenow)
).order_by('-date_start')
for article in variables['articles']:
article.iscreator=1 (I can do some more work here)
但似乎必须循环QS并不是最好的主意。
答案 0 :(得分:1)
很难过,但是你不能将params传递给模板中的方法(事实上这是一个好主意 - 所以你不要将表示逻辑与模型逻辑混合,差不多:))。您必须为此目的编写模板标记。
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
标签看起来像这样(未经测试):
@register.simple_tag(takes_context=True) # assuming you are running in request context
def current_user_is_creator(context,article):
user = context['request'].user
return article.creator.user == user # dont forget to add proper checks
或者您可以在视图中准备所需的数据。