我正在使用python-3.6.4和django-2.0.2开发一个项目。为简单起见,我简要解释了这种情况。假设有三个应用程序: - “问题”,“solve_activities”和“profiles”,其中包含三个模型(如下所述)。我有一个针对每个问题的“DetailView”页面。我想显示登录用户是否已解决问题。
我想要使用的django模板标签是这样的:
{% if user.is_authenticated and problem.solved.all.filter(solver={{user.username}}) %}
以下是上述文件:
“问题/ models.py”:
class Problem(models.Model):
name = models.CharField(max_length=20)
slug = models.SlugField(allow_unicode=True, max_length=100, unique=True)
def __str__(self):
return self.name
def get_absoulte_url(self):
return reverse('problems')
return reverse('problems:problem_detail', kwargs={'slug':self.slug})
我使用'problems / urls.py'中的urlpatterns作为“path('/',views.ProblemDetail.as_view(),name ='problem_detail')”。
“profiles / models.py”(继承自auth.models.User):
class User(auth.models.User, auth.models.PermissionsMixin):
def __str__(self):
return self.username
“solve_activities / models.py”:
class Solve(models.Model):
problem = models.ForeignKey(Problem, on_delete=models.CASCADE, related_name="solved")
solver = models.ForeignKey(User, on_delete=models.CASCADE, related_name="solved")
我只是在用户解决问题时创建此对象。
现在,我在Problem / views.py上的ProblemDetail视图:
class ProblemDetail(generic.DetailView):
model = Problem
template_name = 'problems/problem_detail.html'
和“problems / problem_detail.html”文件,我面临的复杂性基本上是:
<h1>{{problem}}</h1>
<h4>Solve Status: {% if user.is_authenticated and problem.solved.all.filter(solver={{user.username}}) %}Solved{% else %}Unsolved{% endif %}</h4>
再次,
{% if user.is_authenticated and problem.solved.all.filter(solver={{user.username}}) %}
是我想要做的,但我找不到任何有用的资源如何正确地做到这一点。
它引发的错误是:
TemplateSyntaxError at /problems/timus-1000/
Could not parse the remainder: '(solver={{user}})' from 'problem.solved.all.filter(solver={{user}})'
答案 0 :(得分:1)
不要在模板中执行逻辑,这就是视图的用途。将其添加到上下文中并在模板中使用它。
class ProblemDetail(generic.DetailView):
...
def get_context_data(self, *args, **kwargs):
context = super(ProblemDetail, self).get_context_data()
context["solve_status"] = self.request.user.is_authenticated and context["object"].solved.filter(solver=self.request.user).exists()
return context
然后在模板中使用
{% if solve_status %} ..