Python 如何在html模板中连接两个模型?

Python 如何在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

我想用Python Django创建一个简单的论坛。我搞不清楚的主要问题是从两个模型中获取信息

我想显示:文章标题,内容,作者,出版日期和签名。这是我的post_detail.html

{% 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中删除了相关的_名称。