django - 未在 ModelForm 上呈现脆皮表单
问题描述
我正在尝试使用脆形式呈现 ModelForm 但不工作,我已经尝试了两个标签:( {{ form|crispy }} 和 {% crispy form %} )为什么不工作?
模型.py
class ProfileInfo(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE, unique=True)
cover_image = models.ImageField(null=True, blank=True,upload_to='cover/')
profile_image = models.ImageField(null=True, blank=True,upload_to='avatar/')
def __str__(self):
return self.user.username.title()
表格.py
class UploadCoverForm(forms.ModelForm):
class Meta:
model = ProfileInfo
fields = ['cover_image']
def __init__(self, *args, **kwargs):
super(UploadCoverForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
视图.py
@login_required
def upload_cover(request):
user = ProfileInfo.objects.get(user = request.user)
if request.method == "POST":
form = UploadCoverForm(request.POST, request.FILES, instance=user)
if form.is_valid():
user = form.save(False)
cover = form.cleaned_data.get("cover_image")
if cover:
image = Image.open(cover)
image_data = BytesIO()
image.save(fp=image_data, format=image.format)
image_file = ImageFile(image_data)
user.cover_image.save('{}.cover.{}'.format(user,image.format), image_file)
user.save()
return redirect("user:Profile", request.user.username)
else:
form = UploadCoverForm(instance=user)
return render(request, "uploads/upload_cover.html",{"form": form})
我在“base_uploads.html”中包含了引导程序的链接
upload_cover.html
{% extends "uploads/base_uploads.html" %}
{% load crispy_forms_tags %}
{% block title %} Upload Cover {% endblock %}
{% block content %}
<form method="POST" enctype="multipart/form-data" action="{% url 'user:upload_cover' %}">
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-primary btn-md">Upload</button>
</form>
{% endblock %}
设置.py
INSTALLED_APPS = [
'revealy_admin.apps.RevealyAdminConfig',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
'channels',
'users',
'chats',
]
CRISPY_TEMPLATE_PACK = 'bootstrap4'
谢谢
解决方案
由于您只渲染一个字段,您可以使用它来代替:
{{ form.field_name|as_crispy_field }}
推荐阅读
- java - 如何用鼠标运动监听器制作一个移动的球
- c# - 如何将 .html url 后缀添加到 ASP.NET Core 2 中的所有 Razor 页面?
- python-3.x - 如何在 python3 virtualenv 中安装 plistlib?
- javascript - 基于ip位置的javascript时区调整
- python - 分解python列表,即从python列表创建变量
- jboss - 无法在 jboss AS 7.1.1 中部署 war 文件
- c# - 使用C#在MongoDB中插入collection2时如何更新collection1中的字段
- google-places-api - Google 放置 Java 脚本托管解决方案
- c# - 如何在 Page.IsPostBack 之前运行事件处理程序
- c++ - 有没有办法在递归中使用指针来找到数组的最小值?