如何让用户配置文件详细信息在 django 中正常工作



我正在尝试在一个简单的博客网站中包含配置文件功能。我使用用户字段的一对一链接创建了一个配置文件模型,还为具有相应模板名称的配置文件详细信息创建了一个函数视图,但我不断收到 404 错误。

user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True)
username = models.CharField(max_length=15, default='Anonymous')
dp = models.ImageField(null=True)
country = models.CharField(max_length=20, null=True)
age = models.IntegerField(null=True)
joined = models.DateTimeField( auto_now_add=True)
class Meta:
ordering = ['joined']
def __str__(self):
return self.username
def get_absolute_url(self):
return reverse('profile_detail',  args=[str(self.id)])

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()```

views.py
def profile_detail(request, pk):
user = get_object_or_404(User, pk=pk)
context = {'user': user}
return render(request, 'milk/profile_detail.html', context)

profile_detail.html
{% extends 'milk/base.html' %}
{% block title %}
{% endblock %}
{% block content %}
<h2>{{ user.get_full_name }}</h2>
<ul>
<li>Username: {{ user.username }}</li>
<li>Location: {{ user.profile.country }}</li>
<li>Age: {{ user.profile.age }}</li>
</ul>
{% endblock %}

template referencing
<a href="{% url 'post_detail' pk"><em>{{user.get_username }}</em></a>
urls.py
path('profile/<int:pk>/', views.profile_detail, name='profile_detail'),

您可以像这样显示当前用户信息,而无需传递上下文

{% extends 'milk/base.html' %}
{% block title %}
{% endblock %}
{% block content %}
<h2>{{ request.user.profile.get_full_name }}</h2>
<ul>
<li>Username: {{ request.user }}</li>
<li>Location: {{ request.user.profile.profile.country }}</li>
<li>Age: {{ request.user.profile.profile.age }}</li>
</ul>
{% endblock %}

或 而不是"get_object_or_404"尝试

user = User.objects.get(id=pk)

最新更新