显示上传的文件django

时间:2015-08-16 08:18:02

标签: python django

我的django有问题。我需要在单页中显示我的文件

所以我创建模型:

class UserProfile(models.Model):
profile_img = models.ImageField(upload_to='media/images/', blank=True, null=True)
profile_text = models.TextField()
profile_title = models.CharField(max_length=300)
profile_user = models.ForeignKey(User)

和表格

class ProfileForm(ModelForm):
class Meta:
    model = UserProfile
    fields = ['profile_img', 'profile_title']

然后查看

def cabinet(request):
form = ProfileForm(request.POST, request.FILES or None)
if request.method == 'POST' and form.is_valid():
    obj = UserProfile(profile_img=request.FILES['profile_img'])
    obj = form.save(commit=False)
    obj.profile_user = request.user
    obj.save()
    return redirect(reverse(cabinet))
return render(request, 'cabinet.html', {'form': form})

我尝试使用视图

def user_page(request):
profile = UserProfile.objects.all()
return render(request, 'user_page.html', {'profile':profile})

{% for img in profile %}
{{ img.profile_img }}
{% endfor %}

它不起作用 帮助我PLZ,我尝试阅读文档,但它没有帮助

4 个答案:

答案 0 :(得分:2)

因此,您粘贴的代码只会打印每个profile.profile_img的路径。 profile_img属性也是如此,它只存储您上传的图像的路径,而不是图像本身。要使用上传到您网站的媒体文件,您需要在MEDIA_ROOT中指定MEDIA_URLsettings.py

然后您需要将其附加到urls.py。您可能还希望在此处查看:show images in Django templates

完成后,要在模板中显示图像,只需使用HTML标记

<img src="{{MEDIA_URL}}{{ img.profile_img }}" />

答案 1 :(得分:1)

正如你所说,我做到了。图像无法显示。我在浏览器中检查元素:它应该工作 我的设置:

MEDIA_URL = '/media/' MIDIA_ROOT = os.path.join(BASE_DIR, 'media')

我有2个网址,我项目的主要文件:

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^/cabinet', include('comments.urls') ),
url(r'^', include('user_login.urls')),]

和我的应用:

urlpatterns = [
url(r'^$', views.cabinet, name='cabinet' ),
url(r'^/user_page/$', views.user_page, name='user_page'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

答案 2 :(得分:0)

我遇到了同样的问题,我为我的pic字段定义了一个 str 以在模型本身以及我刚刚使用的模板{{pic}中返回self.pic.url }。

答案 3 :(得分:0)

请更正此行
MEDIA_URL = '/media/' MIDIA_ROOT = os.path.join(BASE_DIR, 'media')

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

应该是 MEDIA 而不是 MIDIA