Non mi è chiaro come sia meglio accedere ai parametri URL nelle viste basate sulla classe in Django 1.5.Parametri URL e logica nelle viste basate sulla classe Django (TemplateView)
Si consideri il seguente:
Vista:
from django.views.generic.base import TemplateView
class Yearly(TemplateView):
template_name = "calendars/yearly.html"
current_year = datetime.datetime.now().year
current_month = datetime.datetime.now().month
def get_context_data(self, **kwargs):
context = super(Yearly, self).get_context_data(**kwargs)
context['current_year'] = self.current_year
context['current_month'] = self.current_month
return context
URLCONF:
from .views import Yearly
urlpatterns = patterns('',
url(
regex=r'^(?P<year>\d+)/$',
view=Yearly.as_view(),
name='yearly-view'
),
)
voglio accedere al parametro year
a mio avviso, in modo da poter fare la logica del tipo:
Come si può meglio accedere al parametro url in CBV come sopra, che è sottoclasse di TemplateView
e dove si dovrebbe posizionare idealmente la logica come questa, ad es. in un metodo?
È correttamente inteso che non dovrei creare variabili direttamente nella vista come ho sopra? (qualcosa su di loro è persistente).Inoltre non capisco dove dovrei posizionare la logica come sopra, ad es. in quale metodo? Anche quando faccio 'year = self.kwargs ['year']' nella vista ottengo 'NameError: self not defined'. –
Tecnicamente non dovresti dal momento che sono a livello di classe e sono variabili di classe. Per quanto riguarda 'NameError', dove stai provando a fare' year = self.kwargs ['year'] '? Dovresti farlo con un metodo, non puoi farlo a livello di classe. Quindi, per esempio, stai usando un 'TemplateView', il che significa che dovresti fare la logica nel tuo override' get_context_data'. – Ngenator
Solo per referenziazione: la documentazione su self.request, self.args etc è disponibile in https://docs.djangoproject.com/en/1.10/topics/class-based-views/generic-display/ – LShi