[英]How can I get the url of a Django ImageField?
I am using a modelformset_factory method with forms containing only an ImageField.我正在使用仅包含 ImageField 的表单的 modelformset_factory 方法。 The Model the forms are based on contains a user field that has a many-to-one relationship with a User Model that extends AbstractUser( See Extending User Model with Abstract User ).
表单所基于的模型包含一个用户字段,该字段与扩展 AbstractUser 的用户模型具有多对一关系( 请参阅使用抽象用户扩展用户模型)。 Currently, each instance of a user has a correlating User Profile, but I would also like to allow the user to upload a gallery of images to their profile.
目前,用户的每个实例都有一个相关的用户个人资料,但我还希望允许用户将图片库上传到他们的个人资料。
models.py模型.py
class Gallery(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
image = models.ImageField(upload_to='user_gallery', blank=True, null=True)
def create_gallery(sender, **kwargs):
if kwargs['created']:
user_gallery = Gallery.objects.create(user=kwargs['instance'])
user_gallery.save();
post_save.connect(create_gallery, sender=User)
forms.py表格.py
class GalleryForm(forms.ModelForm):
image = forms.ImageField(label='FormImage')
class Meta:
model = Gallery
fields = ['image']
views.py视图.py
def EditProfile(request):
GalleryFormSet = modelformset_factory(Gallery, form=GalleryForm, extra=3, max_num=3)
if request.method == "POST":
formset = GalleryFormSet(request.POST, request.FILES)
if formset.is_valid():
for form in formset.cleaned_data:
my_image = form['image']
photo = Gallery(user=request.user, image=my_image)
photo.save()
return render(request, 'user_handler/editprofile.html', {'formset': formset})
else:
formset = GalleryFormSet()
return render(request, 'user_handler/editprofile.html', {'formset': formset})
Template模板
<form id="post_form" method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{form.image}}
<img src="{{form.image.url}}"/>
{% endfor %}
<input type="submit" name="submit" value="Submit" />
</form>
The problem I'm have is that using {{ form.image }} produces this result:我遇到的问题是使用 {{ form.image }} 会产生以下结果:
... and using {{ form.image.url }} within an image's source tag produces absolute nothing at all. ...并且在图像的源标签中使用 {{ form.image.url }} 绝对不会产生任何结果。 When I inspect the element I contain it in, it states the source is unknown.
当我检查包含它的元素时,它指出来源未知。 Obviously, the images are being saved in the DB as I'd like, but I can't get the .url functionality to work.
显然,图像正在按照我的意愿保存在数据库中,但我无法使用 .url 功能。 And YES, I do have the media root an all defined:
是的,我确实定义了媒体根目录:
settings.py设置.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'HighlightPage_Project/media')
urls.py网址.py
urlpatterns = [
url(r'^$', views.Login_Redirect),
url(r'^account/', include('user_handler_app.urls')),
url(r'^admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Try to replace your code with the following code:尝试用以下代码替换您的代码:
<img src="{{form.image.url}}"/>
with:和:
<img src="{{form.instance.image.url}}"/>
Try to replace your code with the following code:尝试用以下代码替换您的代码:
views.py视图.py
def EditProfile(request):
GalleryFormSet = modelformset_factory(Gallery, form=GalleryForm, extra=3, max_num=3)
if request.method == "POST":
formset = GalleryFormSet(request.POST, request.FILES)
if formset.is_valid():
for form in formset.cleaned_data:
my_image = form['image']
photo = Gallery(user=request.user, image=my_image)
photo.save()
return render(request, 'user_handler/editprofile.html', {'formset': formset})
else:
user_images = Gallery.objects.filter(user=request.user)
initial_images = [{'image': i.image, 'image_url': i.image.url} for i in user_images if i.image]
formset = GalleryFormSet(initial=initial_images)
return render(request, 'user_handler/editprofile.html', {'formset': formset})
Template模板
<form id="post_form" method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{form.image}}
<img src="{{form.initial.image_url}}"/>
{% endfor %}
<input type="submit" name="submit" value="Submit" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.