0

Imageform をフォームに追加して、すべてのユーザーが写真を追加できるようにしたいと考えています。このhttps://docs.djangoproject.com/en/dev/ref/forms/fields/#imagefield とこれを読みましたhttps://docs.djangoproject.com/en/dev/ref/forms/api/#バインディングアップロードファイル

しかし、それでも私はそれを達成する方法について混乱しています。ユーザーが自分のフォルダから写真を追加できるようにコードを変更するにはどうすればよいですか?これが私のコードで、作成したい理想的なフォームも添付しています。

【私の理想の姿】

私の理想の姿

models.py

from django.db import models
from django.forms import ModelForm

class Sell(models.Model):
    subject = models.CharField(max_length=100)
    price = models.CharField(max_length=100)
    condition = models.CharField(max_length=100)
    photo = models.ImageField(upload_to="media")
    email = models.EmailField()
    body = models.CharField(max_length=200)

フォーム.py

from django.forms import ModelForm
from uasite1.models import Sell

class SellForm(ModelForm):
    class Meta:
        model = Sell

ビュー.py

from django.shortcuts import render_to_response,get_object_or_404
from django.http import HttpResponseRedirect
from uasite1.forms import SellForm
from uasite1.models import Sell
from django.template import RequestContext

def sell_create(request):
    context = {}
    if request.method == 'POST':
        form = SellForm(request.POST)
        if form.is_valid():            
            new_sell = form.save()
            return HttpResponseRedirect('/sechand/%d/' % new_sell.pk)
    else:
        form = SellForm()
    context['form'] = form
    return render_to_response('sell.html',context,context_instance = RequestContext(request))

Sell.html

{% extends 'base.html' %}
{% block extrahead %}
{% endblock %}
{% block content %}

<form enctype="multipart/form-data" action = "/sechand/" method = "post">
    {% csrf_token %}
    {{ form.as_p }}

<input type = "submit" value="Submit" />
</form>

{% endblock%}

Sell_display.html (これは、送信された情報が表示されるテンプレートです。)

{% extends 'base.html' %}
{% block content %}
<div id = 'sell'>

    <h3> Product Name : [ {{ sell.subject }}]</h3>
    <p>Photo{{ sell.photo }}</p>
    <p>Price: [ {{ sell.price }} ]</p>
    <p>Condition: [ {{ sell.condition }} ]</p>
    <p>Comments: [ {{sell.body}} ]</p>
    <p>Contact Email:[ {{ sell.email }} ]</p>
</div>
{% endblock %}

urls.py

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.conf import settings
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^sechand/$','uasite1.views.sell_create'),
    url(r'^sechand/(?P<pk>\d+)/$', 'uasite1.views.sell_detail'),
    url(r'^products/electronics/$', 'uasite1.views.Electronics'),
    url(r'^products/$', 'uasite1.views.ProductsAll'),
    url(r'^admin/', include(admin.site.urls)),
)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
4

1 に答える 1

0

コード全体を調べたわけではありませんが、1つの重要な間違いに気付くことができます。ビューには、次のように表示する必要があります。

form = SellForm(request.POST, request.FILES)

また、この行:

<p>Photo{{ sell.photo }}</p>

私はそれが写真を表示する方法ではないと思います、私は写真へのリンクを入れます:

<p>Photo{{ sell.photo.url }}</p>

そして最後に、開発環境ではメディアファイルを提供したい場合があるので、メインのurls.pyファイルに次の行を追加するだけです。

from django.conf.urls.static import static
from django.conf import settings

urlpatterns = patterns('',
# your url patterns in here

)+ static(settings.MEDIA_URL、document_root = settings.MEDIA_ROOT)

編集:

メディアファイルの提供。そのリンクはあなたに良い概観を与えるはずです、それは私が知っている混乱です、それで私はあなたに私のプロジェクトでするのと同じように例を与えるつもりです。まず、settings.pyでそれを行う方法:

#settings.py
from os.path import dirname, join, realpath
# have in mind that I have settings.py under project_root/project/settings.py
# so you probably want to check your path to your project root folder first
ROOT_DIR = realpath(join(dirname(__file__), '..'))
MEDIA_ROOT = realpath(join(ROOT_DIR, 'media'))
MEDIA_URL = '/media/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    join(ROOT_DIR, "static"),
)

それは私がそれをする方法です、あなたはまた働く多くの方法を見つけることができました。より良い手がかりを与えるために、私のフォルダは次のようになります。

project_root/
    media/
    static/
    project/
        settings.py
于 2012-11-07T00:28:28.050 に答える