Không rõ với tôi nó như thế nào là tốt nhất để truy cập vào URL thông số trong lớp học dựa trên quan điểm-trong Django 1.5.URL thông số và logic trong quan điểm dựa trên lớp Django (TemplateView)
xem xét như sau:
Xem:
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'
),
)
tôi muốn truy cập các thông số year
trong quan điểm của tôi, vì vậy tôi có thể làm luận như:
month_names = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"]
for month, month_name in enumerate(month_names, start=1):
is_current = False
if year == current_year and month == current_month:
is_current = True
months.append({
'month': month,
'name': month_name,
'is_current': is_current})
Cách tốt nhất nên truy cập thông số url trong CBV như ở trên được phân loại là TemplateView
và vị trí lý tưởng nên đặt logic như thế này, ví dụ: trong một phương pháp?
Có hiểu một cách chính xác rằng tôi không được phép tạo ra các biến trực tiếp trong giao diện như tôi có ở trên? (một cái gì đó về họ được liên tục).Ngoài ra tôi không hiểu nơi tôi phải đặt logic như trên, ví dụ như. trong đó phương pháp nào? Ngoài ra khi tôi làm 'year = self.kwargs ['year']' trong khung nhìn tôi nhận được 'NameError: self not defined'. –
Về mặt kỹ thuật bạn không nên vì chúng ở cấp lớp và là các biến lớp. Đối với 'NameError', bạn đang cố gắng làm' year = self.kwargs ['year'] 'ở đâu? Bạn nên làm điều đó trong một phương pháp, bạn không thể làm điều đó ở cấp lớp. Vì vậy, ví dụ, bạn đang sử dụng một 'TemplateView' có nghĩa là bạn sẽ làm logic trong ghi đè' get_context_data' của bạn. – Ngenator
Chỉ để tham khảo: Bạn có thể tìm thấy tài liệu về self.request, self.args vv trong https://docs.djangoproject.com/en/1.10/topics/class-based-views/generic-display/ – LShi