簡體   English   中英

使用Django加載圖片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM