2012-03-01 150 views
0

當我嘗試從媒體根目錄中獲取該圖像時,我正在收到此損壞的圖像。請向您表示不要向我展示文檔或以前問題的鏈接。我已經嘗試了這些東西,但我仍然得到這張破碎的圖像。在開發環境中爲靜態圖像提供服務

Models.py:

class BasicModel(models.Model): 
    name = models.CharField(max_length=200) 
    dob = models.DateField() 
    photo = models.ImageField(upload_to='sample') 

class BasicModelForm(ModelForm): 
    class Meta: 
      model = BasicModel 

Views.py:

def BasicView(request): 
    if request.method == 'POST': 
      form = BasicModelForm(request.POST, request.FILES) 
      if form.is_valid(): 
        data = form.save() 
        return preview(request, data.id) 
    else: 
      form = BasicModelForm() 
    return render_to_response("unnamed.html", {'form': form}, context_instance=RequestContext(request)) 

def preview(request, id): 
    obj = get_object_or_404(BasicModel, pk=id) 
    return render_to_response("preview.html", {'obj': obj}) 

Settings.py:

MEDIA_ROOT = '/home/nirmal/try/files/' 
MEDIA_URL = 'http://localhost:8000/files/' 

Urls.py:

url(r'^unnamed/$', 'unnamed.views.BasicView'), 
url(r'^files/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), 

Preview.html:

<html> 
<body> 
{{ obj.name }} 
{{ obj.dob }} 
<img src="{{ MEDIA_URL }}sample/{{ obj.photo }}" /> 
</body> 
</html> 

任何人都可以幫助我嗎?

謝謝!

回答

2

替換:

{{ MEDIA_URL }}sample/{{ obj.photo }} 

有了:

{{ object.photo.url }} 

作爲一個側面說明,你確定{{MEDIA_URL}}甚至在模板中定義?

+0

是這樣定義的。順便說一句,謝謝..它現在工作。 – rnk 2012-03-01 17:37:18

+0

爲什麼第一個語法錯了?兩者都給出相同的URL http:// localhost:8000/files/sample/qlimp.jpg – rnk 2012-03-01 17:38:02

+0

這是ipdb的一項工作。運行pip install ipdb。然後在你的視圖中輸入「import ipdb; ipdb.set_trace()」。在那裏,你可以輸入「form.instance.photo.url」或「從django.conf.settings import MEDIA_URL; MEDIA_URL + form.instance.photo」,並比較結果。評論是簡短的闡述,但你可以閱讀我關於調試的文章:http://blog.yourlabs.org/debugging-python-and-django-code – jpic 2012-03-01 17:40:34

1

我想記住ImageField表示法返回的URL相對於MEDIA_URL。這意味着你應該使用下面的代碼在你的模板:

<html> 
<body> 
{{ obj.name }} 
{{ obj.dob }} 
<img src="{{ MEDIA_URL }}{{ obj.photo }}" /> 
</body> 
</html> 

或者更短,使用帶有絕對URL路徑:

<html> 
<body> 
{{ obj.name }} 
{{ obj.dob }} 
<img src="{{ obj.photo.url }}" /> 
</body> 
</html> 

提示,查找破圖像的URL在瀏覽器。我猜這是類似http://localhost:8000/files/sample/sample/xyz.png

+0

謝謝。第二個片段正在工作! – rnk 2012-03-01 17:45:52

相關問題