【问题标题】:Can't upload and see image from django models无法从 django 模型上传和查看图像
【发布时间】:2019-10-08 21:46:31
【问题描述】:

我正在尝试在我的模型上上传图像,然后在模板中显示它。

Forms.py:

class ClanakForma(forms.ModelForm):
    class Meta:
        model = Clanak
        fields = '__all__'

模型.py:

class Clanak(models.Model):
    naslov = models.CharField(null=False, blank=True, max_length=120)
    datumObjave = models.DateField(null=False, blank=False)
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE, null=True)   
    videofile= models.FileField(upload_to='images/', null=True, verbose_name="")

    def __str__(self):
        return str(self.naslov) + ', ' + str(self.datumObjave) + ', ' + str(self.autor) + ', ' + str(self.videofile)

views.py

def dodajClanak(request):
    if request.method == 'GET':
        forma = ClanakForma()
    elif request.method == 'POST':
        forma = ClanakForma(request.POST)
        if forma.is_valid():
            data = Clanak()
            data.naslov = forma.cleaned_data['naslov']
            data.datumObjave = forma.cleaned_data['datumObjave']
            data.autor = forma.cleaned_data['autor']
            data.videofile = forma.cleaned_data['videofile']
            #data.email = forma.cleaned_data['email']
            data.save()
            return redirect('readAllNew')
    return render(request, 'justadded.html', {'forma':forma})

def readAllNew(request):
    data = list(Clanak.objects.all())
    return render(request, 'readAllNew.html', {'data':data})

urls.py:

urlpatterns = [
    path('dodajClanak/',views.dodajClanak, name='dodajClanak'),
    path('readAllNew/',views.readAllNew, name='readAllNew'),
] + static(settings.MEDIA_URL, document_root= settings.MEDIA_ROOT)

刚刚添加的.html:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<form action="{% url 'dodajClanak' %}" method="post">
    {% csrf_token %}
    <table border="1">
        {{forma.as_table}}
    </table>

    <input type="submit" name="">
</form>
</body>
</html>   

readAllNew.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<table border="1">

        <tr>
        <th>Naslov</th>
        <th>Datum</th>
        <th>Autor</th>
        <th>Slika</th>
        </tr>
        {% for x in data %}
    <tr>
        <td>{{x.naslov}}</td>
        <td>{{x.datumObjave}}</td>
        <td>{{x.autor}}</td>
        <td><img src='{{ MEDIA_URL }}{{ imagefile }}'></td>
        <td><a href="{% url 'delete' x.id %}">delete</a></td>
        <td><a href="{% url 'edit' x.id %}">edit</a></td>
    </tr>
    {% endfor %}
</table>
</body>
</html>

我的问题是当我转到http://127.0.0.1:8000/dodajClanak/ 并尝试上传图片时出现错误:

英文上写着:“你没有选择任何图像”。

当我打开链接http://127.0.0.1:8000/readAllNew/ 时,我看不到任何图像:

我可以通过管理站点上传它,但仍然看不到它。

【问题讨论】:

  • 阅读this
  • 在您的浏览器中检查页面的来源并查看 中的内容。这可能会让你很容易找出你的错误。
  • 是的,这似乎是个好主意,我会尝试一下,然后我会发回我发现的信息
  • MEDIA_URL 默认情况下未在模板呈现上下文中定义。您需要添加它:{% load static %}{% get_media_prefix as MEDIA_URL %}
  • @dirkgroten 首先我跟踪了源并且我的图像 url 是空的(我在数据库和媒体文件夹中有它)所以我肯定发送了一些错误的东西。它看起来像:“”。我添加了“{% load static %}{% get_media_prefix as MEDIA_URL %}”,但它不会显示任何内容,因为它是空的。

标签: django django-models django-forms django-templates django-views


【解决方案1】:

把表格改成

<form action="{% url 'dodajClanak' %}" method="post" enctype=multipart/form-data>

从这里查看

 forma = ClanakForma(request.POST)
    if forma.is_valid():
        data = Clanak()
        data.naslov = forma.cleaned_data['naslov']
        data.datumObjave = forma.cleaned_data['datumObjave']
        data.autor = forma.cleaned_data['autor']
        data.videofile = forma.cleaned_data['videofile']
        #data.email = forma.cleaned_data['email']
        data.save()
        return redirect('readAllNew')

 forma = ClanakForma(request.POST,request.FILES)
    if forma.is_valid():

        forma.save()
        return redirect('readAllNew')

当您使用ModelForm 时,无需编写所有这些行

【讨论】:

  • 谢谢,现在上传作品,但在我的“readAllNew.html”上仍然看不到图片。我是否正在阅读并正确显示它?
【解决方案2】:

扩展@Exprator 答案

试试这个来显示图片

    <td><img src='{{media_url}}{{ i.videofile.url }}'></td>

希望对你有帮助

【讨论】:

  • 我试过了,现在表格中的字段是空白的,如果需要我可以在我的原始帖子上发布图片吗?
  • 尝试在图片前追加域名
  • 我不确定这是什么意思?
  • 还是一样,也许我添加了错误的设置-“MEDIA_ROOT=os.path.join(BASE_DIR, 'media/')”和“MEDIA_URL="/media/"”?可能是因为图片太大?
  • 最后我用 " ",谢谢你的帮助
猜你喜欢
  • 2019-11-20
  • 2020-12-13
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多