我是Django的新手,并且不明白究竟是什么导致了这一点:
我有一个模型公司,它有一个OneToOneField,创建者。
# models.py
class Company(models.Model):
class Meta:
verbose_name = 'Company'
verbose_name_plural = 'Companies'
creator = models.OneToOneField(User, related_name="company", on_delete=models.CASCADE, unique=False, null=True)
name = models.CharField(max_length=50)
我有一个TemplateView类来处理创建公司模型的get和post请求:
# views.py
class create_company(TemplateView):
def get(self, request):
form = CompanyCreateForm()
title = "Some form"
return render(request, "form.html", {"form": form, "title": title})
def post(self, request):
form = CompanyCreateForm(request.POST)
if form.is_valid():
comp = form.save(commit=False)
comp.creator = request.user
comp.save()
return redirect('index')
表单正确显示,我提交时存储的问题是我使用的base.html,我显示{%user.company%};表单模板扩展如下:
{% extends "account/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<form method="post" action="">
{% csrf_token %}
{{form|crispy}}
<button class="btn btn-success" type="submit">Save</button>
</form>
<br>
</div>
<br>
{% endblock %}
并在base.html中访问
{% if user.is_authenticated %}
{% user.company %}
{% endif %}
但即使设置了user.company也没有显示;它仅在我重定向到索引时显示,但在我呈现表单时不显示。
有人可以帮助我了解导致这种情况的原因吗?
答案 0 :(得分:1)
{% if request.user.is_authenticated %}
{% request.user.company %}
{% endif %}
您没有向base.html
发送任何上下文,因此只有user
无效。
答案 1 :(得分:0)
当我模拟你的代码时,这是错误。
Error during template rendering
In template /home/user/django/drf_tutorial/snippets/templates/base.html, error at line 2
Invalid block tag on line 2: 'user.company', expected 'elif', 'else' or 'endif'. Did you forget to register or load this tag?
1 {% if user.is_authenticated %}
2 {% user.company %}
3 {% endif %}
4 {% block content %}{% endblock %}
它提示显示公司的代码应该是变量{{ }}
而不是标记{% %}
。因此base.html模板应如下所示。
{% if user.is_authenticated %}
{{ user.company }}
{% endif %}
{% block content %}{% endblock %}