2015-06-19 56 views
0

我無法在基於課堂的視圖中訪問MEDIA_URLMEDIA_URL在基於課堂的視圖中

我的理解是我會創建我的視圖,而我的上下文處理器會將其提供到我的基於函數的視圖中。現在我正在嘗試切換到基於類的,並且我不再有權訪問MEDIA_URL

上下文處理器不能使用基於類的視圖嗎?我現在需要手動將它添加到我的環境嗎?

這裏是我的處理器:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.core.context_processors.request', 
    'django.contrib.messages.context_processors.messages', 
    'django.core.context_processors.request', 
) 

我以前的觀點看起來是這樣的:

def my_view(request): 
    context = { 
     "foo": "bar" 
    } 
    return render(request, 'index.html', context) 

,我將能夠使用{{MEDIA_URL}}

我的基於類的觀點是這樣的:

class MyView(View): 
    def get(self, request): 
     context = { 
      "foo": "bar" 
     } 
     return render(request, 'index.html', context) 

我無法訪問{{MEDIA_URL}}

+2

你使用的是什麼版本的Django? Django 1.8將'TEMPLATE_CONTEXT_PROCESSORS'的配置移到了'TEMPLATES'設置。除此之外,我不認爲你不需要訪問模板中的'MEDIA_URL'。這對我來說是一種不好的代碼味道。您應該使用從文件存儲API生成的URL(即'{{model.field.url}}')。 –

+0

我剛剛從1.7開始使用1.8,並沒有意識到他們已經做出了改變。這解決了我的問題。 此外,我沒有意識到我能夠訪問媒體,我只是切換到它,它完美的工作,謝謝你的提示。當我去閱讀文檔時,我不得不拾起Django/Python。 如果您可以發表您的評論作爲答案,我會接受它。 – mitnosirrag

回答

2

的Django 1.8移動的TEMPLATE_CONTEXT_PROCESSORS配置到TEMPLATES設置。除此之外,我認爲你不應該在模板中訪問MEDIA_URL。這對我來說是一種不好的代碼味道。您應該使用從文件存儲API生成的url(即{{ model.field.url }})。