2012-03-04 107 views
5

如何在Django的Createview中聲明一個變量,以便我可以在模板中使用它? 例如,我想在模板中使用{{place_slug}}。我通過從urls.py象下面這樣:Django - CreateView - 如何聲明變量並在模板中使用它

urls.py:

urlpatterns = patterns('', 
    (r'^new/(?P<place_slug>[\w\-\_]+)/?$', PictureCreateView.as_view(), {}, 'upload-new'), 
) 

views.py:

class PictureCreateView(CreateView): 
    model = Picture 

    def dispatch(self, *args, **kwargs): 
     self.place = get_object_or_404(Place, slug=kwargs['place_slug']) 
     return super(PictureCreateView, self).dispatch(*args, **kwargs) 

    def form_valid(self, form): 
     more code here 
+0

你不應該從你的urls.py中調用'PictureCreateView.dispatch'嗎? – vikki 2012-03-04 04:53:39

+1

as_view is [correct](https://docs.djangoproject.com/zh/dev/topics/class-based-views/#simple-usage) – dokkaebi 2012-03-04 04:56:11

+0

@dokkaebi我明白了! – vikki 2012-03-04 08:43:57

回答

12

覆蓋get_context_data並設置context_data [ 'place_slug'] = your_slug

類似這樣的:

def get_context_data(self, **kwargs): 
    context = super(PictureCreateView, self).get_context_data(**kwargs) 
    context['place_slug'] = self.place.slug 
    return context 

Django docs有關於此的更多信息。