【问题标题】:display uploaded files django显示上传的文件django
【发布时间】:2021-08-05 16:06:00
【问题描述】:

我对 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 %}

这是行不通的 请帮助我,我尝试阅读文档,但没有帮助

【问题讨论】:

  • 它是如何工作的?它显示什么吗?您粘贴的代码应打印每个“profile.profile_img”的路径,您的实际输出是什么?
  • 是的,它是我的图像 media/img/oOOSlWzBOSQ.jpg 的打印路径

标签: python django


【解决方案1】:

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

然后您需要将其附加到您的urls.py。您可能还想看看这里:show images in Django templates

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

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

【讨论】:

  • 我做到了,正如你所说。图像不显示。我在浏览器中检查元素: 它应该适用于我的设置: MEDIA_URL = '/media/' MIDIA_ROOT = os.path.join(BASE_DIR, 'media')
  • 我有 2 个 url,我的项目的主文件: urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^/cabinet' , include('cmets.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】:

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

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

我有 2 个 url,我的项目的主文件:

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)

【讨论】:

  • 问题可能是你之前的图片没有上传到MEDIA_ROOT,因为你后来指定了。尝试上传新图片并查看
  • 也不起作用。我认为 url 或我的模型有问题
  • 嗯,你有没有在你的项目文件中搜索过上传的图片?如果它们在那里,它们是否在 MEDIA_ROOT 目录中?
  • 是的,我发现设置有误。它是MIDIA 而不是MEDIA,在模型中我修复了upload_to,现在它是'images/'。并且 django 在 MEDIA_ROOT 中创建文件夹。但这无济于事
  • 是的,我终于修好了!在我的主 url 中使用 + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ,而不是在应用程序 url 中。多谢!感谢您对我糟糕的英语和 django 的耐心
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    应该是 MEDIA 而不是 MIDIA

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 2016-07-12
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      相关资源
      最近更新 更多