【问题标题】:django upload image file from templatesdjango从模板上传图片文件
【发布时间】:2016-04-27 10:37:54
【问题描述】:

每个人,,我可以从管理站点上传图片,但不知道如何从模板上传图片,,

models.py

from django.db import models
from django.contrib.auth.models import User
from PIL import Image
from django.utils import timezone



def get_imagep_Product(instance, filename):
    return '/'.join(['products', instance.slug, filename])


class ProductsTbl(models.Model):
    model_number = models.CharField(max_length=255, blank=True, null=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    material = models.TextField(blank=True, null=True)
    feature = models.TextField(blank=True, null=True)
    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField(auto_now=True)
    release = models.DateTimeField(blank=True, null=True)
    submit_date = models.DateTimeField(blank=True, null=True)
    slug = models.SlugField(unique=True)
    user = models.ForeignKey(User, blank=True, null=True)
    image = models.ImageField(upload_to=get_imagep_Product, blank=True) #image file 

    def __unicode__(self):
        return self.name
    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''

        if not self.id:
            self.created = timezone.now()
        return super(ProductsTbl, self).save(*args, **kwargs)

views.py

from django.shortcuts import render,redirect
from .forms import ProductsTblForm
from .models import ProductsTbl
from django.template.defaultfilters import slugify
from django.contrib.auth.decorators import login_required
from django.http import Http404,HttpResponse
import datetime

def create_thing(request):
    form_class = ProductsTblForm

    if request.method == 'POST':

        form = form_class(request.POST)
        if form.is_valid():

            thing = form.save(commit=False)

            thing.user = request.user
            thing.slug = slugify(thing.model_number)

            thing.save()

            return redirect('thing_detail', slug=thing.slug)

    else:
        form = form_class()
    return render(request, 'things/create_thing.html', { 'form': form,})

urls.py

from django.conf.urls import patterns, url,include
from django.contrib import admin
from django.views.generic import TemplateView
from designer import views
from designer.backends import MyRegistrationView
from django.conf import settings

urlpatterns = [
    url(r'^create_thing/$', views.create_thing, name='create_thing'),
]

if settings.DEBUG:
    urlpatterns += [
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
    ]

forms.py

from django.forms import ModelForm
from .models import ProductsTbl


class ProductsTblForm(ModelForm):
    class Meta:
        model = ProductsTbl
        fields = ('model_number','name','feature', 'material','release','image',)

create_thing.html

{% extends 'base.html' %} {% block title %}
Create a Thing - {{ block.super }} {% endblock title %}
{% block content %}
<h1>Create a Thing</h1>
<form role="form" action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock content %}

当我点击创建东西时,我可以在这里看到表单,但是我不知道如何让图片上传

我一直在寻找this link,但是我不知道如何让它在我的应用程序中工作,

【问题讨论】:

  • 通过form_class(request.POST, request.FILES) 而不是form_class(request.POST) 创建表单就足够了。
  • 我添加了request.FILES like ,,form = form_class(request.POST,request.FILES),,,但是当我提交上传时,美的/ ,,,??

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


【解决方案1】:

首先,您需要在&lt;form&gt; 定义中添加enctype="multipart/form-data"。因为这是文件上传所必需的。

<form role="form" action="" method="post" enctype="multipart/form-data">

其次,您需要通过 request.FILES 在视图中创建表单,而不是 form_class(request.POST)

form_class(request.POST, request.FILES)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2020-04-21
    • 2013-11-23
    • 2017-05-20
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多