Python 如何在html模板中连接两个模型?
我想用Python Django创建一个简单的论坛。我搞不清楚的主要问题是从两个模型中获取信息 我想显示:文章标题,内容,作者,出版日期和签名。这是我的post_detail.htmlPython 如何在html模板中连接两个模型?,python,django,Python,Django,我想用Python Django创建一个简单的论坛。我搞不清楚的主要问题是从两个模型中获取信息 我想显示:文章标题,内容,作者,出版日期和签名。这是我的post_detail.html {% extends 'Homepage/base.html' %} {% block content %} <h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1
{% extends 'Homepage/base.html' %}
{% block content %}
<h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
<h6>Kategoria: {{ post.category }} | Autor: {{ post.author }} | {{ post.published_date }}</h6>
<p>{{ post.description|linebreaksbr }}</p>
<p><hr>{{ HERE I DON'T KNOW HOW TO SHOW SIGNATURE }}</p>
{% endblock %}
</body>
</html>
帐户应用程序模型.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Category(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return self.title
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
description = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
published_date = models.DateTimeField(default=timezone.now)
updated = models.DateTimeField(blank=True, null=True)
views = models.IntegerField(default=0)
def __str__(self):
return self.title
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='user', on_delete=models.CASCADE)
website = models.URLField(default='', blank=True)
city = models.CharField(max_length=100, default='', blank=True)
signature = models.TextField(default='', blank=True)
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
user_profile = UserProfile(user=user)
user_profile.save()
post_save.connect(create_profile, sender=User)
def __str__(self):
return self.user.username
我的完整代码在上,为什么不在发送请求时返回相关的UserProfile模型呢
def my_view(request):
context = {}
my_post = Post.objects.all.get(0) # get the post here
my_user = UserProfile.objects.get(user=my_post.author)
context['post'] = my_post
context['user'] = my_user
return TemplateResponse(request, 'my_template.html', context)
然后,在html中,可以使用这些模板标记
{% block content %}
<h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
<h6>Kategoria: {{ post.category }} | Autor: {{ post.author }} | {{ post.published_date }}</h6>
{% autoescape on %}
<p>{{ post.description|linebreaksbr }}</p>
<p><hr>{{ user.signature }}</p>
{% endautoescape %}
{% endblock %}
您需要自动转义,这样人们就不能通过向您的站点中注入恶意HTML/JS来更改站点的外观或功能。您可以遵循以下关系:
<p>{{ post.author.user.signature }}</p>
注意,您已经将相关的_名称从User to UserProfile设置为User,这没有任何意义。您应该将其保留为默认值,即userprofile。我猜您的{{post.author}}不会返回任何内容,请更改为{post.author.get_full_name} 对于签名,您不需要在模型中添加任何相关名称
user = models.OneToOneField(User, on_delete=models.CASCADE)
在模板中
{{post.author.userprofile.signature}}
我从UserProfile中删除了相关的_名称。