Django FormPreview和ImageField,图像未显示

时间:2013-12-20 07:37:56

标签: python django

有表格。

class AddLogo(forms.Form):

    title = forms.CharField(max_length=100)
    date = forms.TimeField()
    image = forms.ImageField()

并拥有标准的Django预览表单。

from django.contrib.formtools.preview import FormPreview
from django.http import HttpResponseRedirect
from company.models import Company

class add_logo_preview(FormPreview):

    form_template = 'add_logo_preview.html'

    def done(self, request, cleaned_data):
        return HttpResponseRedirect('/company/hey/')

在模板中

{% extends "base.html" %}

{% block block_js %}
{% endblock block_js %}

{% block content %}

<h1>Preview your submission</h1>

{% with form as job %}
<div class="job_block">
    <div class="job_content">
        <div class="job_title">
            <h1>{{ job.title.data }}</h1>
            <span class="date">{{ job.date.date.data }}</span>
        </div>
        <div class="job_company">
            <div class="company_logo">
                {{ job.image.url }}
            </div>
            <div class="company_description">
                <div class="name">{{ job.company_name.data }}</div>
                <div class="location">Главный офис: {{ job.company_location.data }}</div>
                <div class="website"><a href="{{ job.company_url.data }}">{{ job.company_url.data }}</a></div>
            </div>
        </div>
        <article>
            {{ job.description.data|safe }}
        </article>
    </div>
    <aside>
        <h4>Поделиться вакансией</h4>
    </aside>
</div>
<div class="job_feedback">
    <h3>Откликнутся на вакансию</h3>
    <p>{{ job.apply_terms.data|safe }}</p>
</div>
{% endwith %}

<p>Security hash: {{ hash_value }}</p>

<form action="" method="post">{% csrf_token %}
{% for field in form %}{{ field.as_hidden }}
{% endfor %}
<input type="hidden" name="{{ stage_field }}" value="2" />
<input type="hidden" name="{{ hash_field }}" value="{{ hash_value }}" />
<p><input type="submit" value="Submit" /></p>
</form>

<h1>Or edit it again</h1>

<h1>Шаг первый: создайте свое объявление</h1>

<form action="/job/preview/" method="POST" class="form">{% csrf_token %}
    <h3>Опишите вакансию</h3>
    <fieldset>
        <div class="label_box">
            <label for="">Назавние вакансии</label>
        </div>
        <div class="fields_box">
            {{ form.title }}
        </div>
    </fieldset>
    <fieldset>
        <div class="label_box">
            <label for="">Категория</label>
        </div>
        <div class="fields_box">
            {% for cat in form.category %}
                {% if cat.choice_value %}
                {{ cat }}
                {% endif %}
            {% endfor %}
        </div>
    </fieldset>
    <fieldset>
        <div class="label_box">
            <label for="">Головной офис</label>
        </div>
        <div class="fields_box">
            {{ form.company_location }}
        </div>
    </fieldset>
    <fieldset class="one_col">
        <div class="label_box">
            <label for="">
                Описание вакансии
            </label>
        </div>
        <div class="fields_box">
            {{ form.description }}
        </div>
    </fieldset>
    <fieldset>
        <div class="label_box">
            <label for="">
                Apply this job.
            </label>
        </div>
        <div class="fields_box">
            {{ form.apply_terms }}
        </div>
    </fieldset>
    <h3>О компании</h3>
    <fieldset>
        <div class="label_box">
            <label for="">Название</label>
        </div>
        <div class="fields_box">
            {{ form.company_name }}
        </div>
    </fieldset>
    <fieldset>
        <div class="label_box">
            <label for="">Логотип</label>
        </div>
        <div class="fields_box">
            {{ form.image }}
        </div>
    </fieldset>
    <fieldset>
        <div class="label_box">
            <label for="">URL</label>
        </div>
        <div class="fields_box">
            {{ form.company_url }}
        </div>
    </fieldset>
    <fieldset>
        <div class="label_box">
            <label for="">Email</label>
        </div>
        <div class="fields_box">
            {{ form.company_email }}
        </div>
    </fieldset>
    <fieldset>
        <div class="label_box">
            <span>
                Подсветить это объявление?
            </span>
            <label for="">{{ form.highlight }} Подсветить?</label>
        </div>
    </fieldset>
    <input type="submit" value="Просмотреть">
</form>
{% endblock %}

我尝试:{{form.image.url}}但不起作用。我理解一个:Django不上传文件,但我怎么改变这个?如何在django FormPreview中制作预览图像?

1 个答案:

答案 0 :(得分:1)

将图像转换为base64字符串,在表单中为该base 64字符串添加一个字段。在预览模板中,显示base64字符串。最后保存图像时,您需要创建一个文件,将base 64字符串的内容写入其中,然后将该文件保存到模型中。