如何在 Django 框架中正确显示图像到 html 模板?
How to properly display images to html template in Django framework?
我试了一天试图让保存到媒体文件夹的图像显示在我的模板文件中,但无济于事。图片已上传到 media/images 文件夹,但我不知道如何显示它们。我不知道我做错了什么,因为我看到很多人使用这些方法并得到了结果。我在想也许我的 post 函数没有向模板返回正确的数据?
我是 Django 和 html 的新手,所以请原谅我的错误。
这是我当前的设置:
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
models.py
from django.db import models
class Post(models.Model):
post = models.ImageField(upload_to="images")
forms.py
from django import forms
from imageDetection.models import Post
class HomeForm(forms.ModelForm):
class Meta:
model = Post
fields = ('post',)
views.py
class HomeView(TemplateView):
template_name = 'imageDetection/test.html'
@staticmethod
def detect(request):
return render(request, 'imageDetection/detection.html')
def get(self, request):
form = forms.HomeForm()
return render(request, self.template_name, {'form': form})
def post (self, request):
context = {}
if request.method == "POST":
form = forms.HomeForm(request.POST, request.FILES)
if form.is_valid():
image_form = models.Post()
image_form.post = form.cleaned_data['post']
image_form.save()
context['form'] = image_form
return render (request, 'imageDetection/detection.html', context)
else:
form = forms.HomeForm()
context['form'] = form
return render(request, self.template_name, context)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('imageDetection.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
模板/Detection.html
{% for post in form %}
{% if post.image %}
<img src="{{ MEDIA_URL }}{{ post.image.url }}" />
{% endif %}
{% endfor %}
谢谢,如有任何帮助,我们将不胜感激
在这里我没有看到任何名称为 image
的字段 model.You 已经定义了名称为 post
的图像。
{% if post.post %}
<img src="{{ post.post.url }}" />
{% endif %}
并且在这里最好为您的字段使用 有意义的 变量并且 context.You 可以使用 image
而不是 post
命名您的图像字段和上下文 images
而不是 forms
我试了一天试图让保存到媒体文件夹的图像显示在我的模板文件中,但无济于事。图片已上传到 media/images 文件夹,但我不知道如何显示它们。我不知道我做错了什么,因为我看到很多人使用这些方法并得到了结果。我在想也许我的 post 函数没有向模板返回正确的数据? 我是 Django 和 html 的新手,所以请原谅我的错误。
这是我当前的设置:
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
models.py
from django.db import models
class Post(models.Model):
post = models.ImageField(upload_to="images")
forms.py
from django import forms
from imageDetection.models import Post
class HomeForm(forms.ModelForm):
class Meta:
model = Post
fields = ('post',)
views.py
class HomeView(TemplateView):
template_name = 'imageDetection/test.html'
@staticmethod
def detect(request):
return render(request, 'imageDetection/detection.html')
def get(self, request):
form = forms.HomeForm()
return render(request, self.template_name, {'form': form})
def post (self, request):
context = {}
if request.method == "POST":
form = forms.HomeForm(request.POST, request.FILES)
if form.is_valid():
image_form = models.Post()
image_form.post = form.cleaned_data['post']
image_form.save()
context['form'] = image_form
return render (request, 'imageDetection/detection.html', context)
else:
form = forms.HomeForm()
context['form'] = form
return render(request, self.template_name, context)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('imageDetection.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
模板/Detection.html
{% for post in form %}
{% if post.image %}
<img src="{{ MEDIA_URL }}{{ post.image.url }}" />
{% endif %}
{% endfor %}
谢谢,如有任何帮助,我们将不胜感激
在这里我没有看到任何名称为 image
的字段 model.You 已经定义了名称为 post
的图像。
{% if post.post %}
<img src="{{ post.post.url }}" />
{% endif %}
并且在这里最好为您的字段使用 有意义的 变量并且 context.You 可以使用 image
而不是 post
命名您的图像字段和上下文 images
而不是 forms