1

我在通过链接访问时遇到问题。我正在使用简单的缩略图框架,并为用户列表创建了简单的视图以列出所有现有用户。错误信息:

django.template.exceptions.TemplateSyntaxError: 变量 'user.profile.photo' 是无效来源。

Django Traceback 让我看到了这个观点。

视图.py 文件:

@login_required
def user_list(request):
    users = User.objects.filter(is_active=True)
    return render(request,
                  'account/user/list.html',
                  {'section': 'people',
                   'users': users})

urls.py 文件:

path('users/', views.user_list, name='user_list'),

模板列表.html:

{% extends "base.html" %}
{% load thumbnail %}

{% block title %}People{% endblock %}

{% block content %}
  <h1>People</h1>
  <div id="people-list">
    {% for user in users %}
      <div class="user">
        <a href="{{ user.get_absolute_url }}">
          <img src="{% thumbnail user.profile.photo 180x180 %}">
        </a>
        <div class="info">
          <a href="{{ user.get_absolute_url }}" class="title">
            {{ user.get_full_name }}
          </a>
        </div>
      </div>
    {% endfor %}
  </div>
{% endblock %}

来自 base.html 的示例代码:

 <li {% if section == "people" %}class="selected"{% endif %}>
 <a href="{% url "user_list" %}">People</a>
</li>

模型.py:

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,
                                on_delete=models.CASCADE)
    date_of_birth = models.DateField(blank=True, null=True)
    photo = models.ImageField(upload_to='users/%Y/%m/%d/',
                              blank=True)

    def __str__(self):
        return f'Profile for user {self.user.username}'

感谢您提前提供帮助。

4

2 回答 2

1

查看文档https://easy-thumbnails.readthedocs.io/en/latest/usage/#templates。从对象(通常是文件字段)创建缩略图。我试过了,它帮助解决了我的问题:

 <img src="{{ user.profile.photo.url }}">
于 2020-08-15T13:34:14.350 回答
0

我也有这个问题。您可以使用以下解决方案解决问题:

  1. 而不是users = User.objects.filter(is_active=True),使用profiles = Profile.objects.all()

  2. 更改如下:return render(request,'account/user/list.html',{'section': 'people', 'profiles': profiles})

  3. list.html文件中,更改如下:

    {% extends 'base.html' %}
    {% load thumbnail %}
    
    {% block title %}People{% endblock %}
    
    {% block content %}
        <h1>People</h1>
        <div id="people-list">
            {% for profile in profiles %}
                <div class="user">
                    <a href="{{ profile.user.get_absolute_url }}">
                        <img src="{% thumbnail profile.photo 180x180 %}" alt="{{ profile.user.last_name }}">
                    </a>
                    <div class="info">
                        <a href="{{ profile.user.get_absolute_url }}" class="title">
                            {{ profile.user.get_full_name }}
                        </a>
                    </div>
                </div>
            {% endfor %}
        </div>
    {% endblock %}
    
于 2021-08-28T10:42:31.700 回答