在django中显示模板中的模型图片

时间:2017-05-01 13:42:09

标签: python html django django-templates

我想在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)

tempate

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

4 个答案:

答案 0 :(得分: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中调用静态和媒体网址

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,像这样打电话给avathar

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

答案 1 :(得分:0)

您需要以这种方式使用attibutes名称:

<img src={{ u.allusers.avatar.url }}

可以在documentation中查看。

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

答案 2 :(得分:0)

您需要在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 }}">

答案 3 :(得分:0)

实际上我得到了另一种解决方案

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)