[英]Django Files doesn't save
我想做一个 django 项目,您可以在其中上传图像,并且该图像显示在另一个页面上。 我只能用管理面板编辑它。
这是代码:
def home(request):
all1 = New.objects.filter(username='mynameis12').all()
if not request.user.is_authenticated:
return redirect('/login/')
return render(request, 'home.html',{'alls':all1})
class New(models.Model):
username = models.CharField(max_length=200)
image = models.ImageField(upload_to='media')
class New1(ModelForm):
username = forms.CharField(max_length=200)
image = forms.ImageField(required=False)
class Meta:
model = New
fields = ['username','image']
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
CRISPY_TEMPLATE_PACK = 'bootstrap4'
LOGIN_URL = '/b/'
LOGIN_REDIRECT_URL = '/b/'
LOGOUT_REDIRECT_URL = '/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
图像已显示,但未保存。
我应该怎么办?
谢谢。
您需要在视图中导入表单,并且需要将表单保存在视图中:
from forms import New1
def home(request):
if not request.user.is_authenticated:
return redirect('/login/')
all1 = New.objects.filter(username='mynameis12').all()
form = New1()
if request.method == "POST":
form = New1(request.POST)
form.save()
return render(request, 'home.html',{'alls':all1,'form':form})
在您的 HTML 中:
<form>
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
按照此链接获取教程: https ://tutorial.djangogirls.org/en/django_forms/
如果要上传主页中的图片,则必须将表单传递给它
from django.contrib.auth.decorators import login_required
# if you just want to display the images in the home page
from .models import New
@login_required(login_url="login") # this does the same thing as the if statement but better
def home(request):
all1 = New.objects.filter(username='mynameis12')# no need for the '.all()'
return render(request, "home.html", {"all1": all1 })
如果您只是在编辑管理面板,则无需使用该表单,但如果您仍想在这里使用它。
from django.contrib.auth.decorators import login_required
from .forms import NewForm
@login_required(login_url="login") # this does the same thing as the if statement but better
def home(request):
form = NewForm()
if request.method == "POST":
form = NewForm(request.POST, request.FILES)
if form.is_valid():
form.save()
...
return render(request, "home.html", {"form": form})
class NewForm(ModelForm):
class Meta:
model = New
fields = ['username','image']
def __init__(self, *args, **kwargs):
super(NewForm, self).__init__(*args, **kwargs)
for name, field in self.fields.items():
field.widget.attrs.update({'class': "input"})
如果您不更改模型的 models.py 定义中的任何内容,则无需在此处重新定义字段。
点安装白噪声枕头
MIDDLEWARE = [
...
"whitenoise.middleware.WhiteNoiseMiddleware",
... ]
....
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/
# STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATIC_URL = "/static/"
# start
MEDIA_URL = "/images/"
STATICFILES_DIRS = [BASE_DIR / "static"]
MEDIA_ROOT = BASE_DIR / "static/images"
STATIC_ROOT = BASE_DIR / "staticfiles"
### end
from django.conf import settings
from django.conf.urls.static import static
...
urlpatterns = [....]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.