【问题标题】:Display profile pic from model in template in Django在 Django 的模板中显示模型中的配置文件图片
【发布时间】:2017-09-28 22:15:13
【问题描述】:

我想在img 标签的src 字段中插入用户的图像。但我做不到。 我的代码:

models.py

class allusers(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='retest/static/images/')

views.py

u = User.objects.get(username=username)

模板

<img src={{ u.allusers.avatar }} />

【问题讨论】:

    标签: python html django django-templates


    【解决方案1】:

    你需要使用属性名称,这样:

    &lt;img src={{ u.allusers.avatar.url }}

    可以在documentation查看。

    注意:如果u.allusers 是一个很好的参考,这将有效,对此我有些怀疑。

    【讨论】:

    • 也许你需要使用 namepath 属性。你在 url 属性中得到什么字符串?展示他们的价值观并选择适合你的。
    【解决方案2】:

    1、在设置中正确注册静态和媒体。

    MEDIA_URL = '/media/'
    MEDIA_ROOT = '/srv/django/myproject/src/myproject/media'
    STATIC_URL = '/static/'
    STATIC_FILE_ROOT = '/srv/django/myproject/src/myproject/static'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "static"),
        '/srv/django/myproject/src/myproject/static',
    )
    

    2、在urls.py中调用静态和媒体url

    from django.views.static import serve
    
    url(r'^media/(?P<path>.*)$', serve, { 'document_root': settings.MEDIA_ROOT}), 
    url(r'^static/(?P<path>.*)$', serve, { 'document_root': settings.STATIC_FILE_ROOT}),
    

    3、这样调用头像

    <img src="{{ u.allusers.avatar.url }}" alt="Avathar"/>
    

    【讨论】:

      【解决方案3】:

      需要在OneToOne字段中使用related_name,通过User引用allusers模型。

       class allusers(models.Model):
          user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
      

      模板

      <img src="{{ u.profile.avatar.url }}">
      

      【讨论】:

        【解决方案4】:

        其实我有一个替代解决方案

        settings.py

        STATIC_URL = '/static/'
        STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
        MEDIA_URL = '/media/'
        MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
        

        urls.py

        from django.conf.urls.static import static
        if settings.DEBUG:
            urlpatterns += static(settings.STATIC_URL, 
        document_root=settings.STATIC_ROOT)
            urlpatterns += static(settings.MEDIA_URL, 
        document_root=settings.MEDIA_ROOT)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-13
          • 2020-02-02
          • 1970-01-01
          • 1970-01-01
          • 2020-09-29
          • 2017-12-08
          • 2013-02-16
          相关资源
          最近更新 更多