[英]Loading image with Django
由於某些原因,我無法將圖像上傳到Django。 這些模型正在保存文件名,但是將文件保存在我的媒體文件夾中。
這是我的模特
class Quiz(models.Model):
name = models.CharField(
verbose_name ='Quiz Title',
max_length = 50
)
description = models.TextField(
blank = True,
null = True,
verbose_name = 'Quiz Description'
)
pool = models.ForeignKey (
Pool,
verbose_name = 'Category of Quiz',
)
categories = models.ManyToManyField (
Category,
through = 'QuizCategory',
related_name = 'category',
verbose_name = 'Category',
help_text = 'Categories in this Quiz'
)
live = models.BooleanField (
verbose_name = 'Quiz is Live?',
default = False,
)
logo = models.ImageField(
upload_to = 'logos',
blank = True,
)
def __unicode__(self):
return u'%s' % (self.name)
這是我的修正 查看
def create_quiz(request):
if request.method == "POST":
form = QuizForm(request.POST, request.FILES)
if form.is_valid():
# file is saved
form.save()
編輯
這是FORM聲明
class QuizForm (forms.ModelForm):
class Meta:
model = Quiz
fields = ('name', 'description', 'pool', 'categories', 'live', 'logo')
HTML
<form method="post" action="{% url 'create-quiz' %}" enctype="multipart/form-data" >{% csrf_token %}
<input hidden name="id" value="{% if quiz.id %}{{quiz.id}}{% else %}0{% endif %}" readonly>
<div class="col-xs-12 col-sm-8 col-md-6 col-md-offset-2">
<input required type="text" name="name" {% if quiz.name %}value="{{quiz.name}}"{% else %}placeholder="Quiz Name"{% endif %} class="form-control quiz-search-box">
<textarea required name="description" {% if quiz.description %}{% else %}placeholder="Quiz Description"{% endif %} class="form-control quiz-search-box">{% if quiz.description %}{{quiz.description}}{% endif %}</textarea>
<select name="pool" class="form-control quiz-search-box">
{% for p in pool %}<option value="{{p.name}}" {% if quiz.pool.name == p.name %}selected{% endif %}>{{p.name}}</option>{% endfor %}
</select>
<h2>Questions</h2>
<table class="table table-condenced">
{% for q in questions %}
<tr><td>{{q.name}}</td></tr>
{% endfor %}
{% if quiz != 'new' %}
<a data-toggle='modal' data-target='#myQuestionModal' class="btn btn-primary">Add Question</a>
{% endif %}
</table>
</div>
<div class="col-xs-12 col-sm-4 col-md-2 ">
<span class="number-of-questions">
Number of questions in this quiz: {{questions|length}}
</span>
<span class="add-quiz-logo">
{% if quiz.logo %}
<img id="logo" src="/media/{{quiz.logo}}" width="150" alt="Logo spacer" />
{% else %}
<img id="logo" src="{% static '/img/no-logo.png' %}" width="150" alt="Logo spacer" />
{% endif %}
<input id="id_image" type="file" class="" name="logo" onchange="readURL(this);">
</span>
<div>
<input type="submit" value="Save Quiz" class="btn btn-primary" />
</div>
</div>
</form>
幫助最歡迎。 謝謝
代替POST:
quiz.pool = Pool.objects.get(name=request.POST.get('pool'))
嘗試使用文件:
quiz.pool = Pool.objects.get(name=request.FILES.get('pool'))
更新:
另外,您應該設置django以使用媒體文件。 添加到設置:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'media')
並將媒體添加到urlpattern:
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
之后,您可以使用以下命令將圖像插入模板:
<img src="{{ instance.logo.url }}"/>
Mouse博士解決了這個問題。 我在<form>
忘記了enctype="multipart/form-data"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.