Şu anda django 1.3'te sınıf tabanlı görünümleri kullanmayı öğreniyorum. Onları kullanmak için bir uygulamayı güncellemeye çalışıyorum, ancak hala nasıl çalıştıklarını çok iyi anlayamıyorum (ve her gün iki veya üç kez gibi tüm sınıf-temelli görünümleri okudum).django 1.3 içinde DetailView nasıl yapılır?
Soru için, fazladan bağlam verisi gerektiren bir alan dizin sayfam var, url parametresi bir addır (pk değil, değiştirilemez, beklenen davranış) ve kullanıcılar Profillerinde seçilen alanın girememesi.
Benim fonksiyon tabanlı kodu (çalışma ince):
def view_space_index(request, space_name):
place = get_object_or_404(Space, url=space_name)
extra_context = {
'entities': Entity.objects.filter(space=place.id),
'documents': Document.objects.filter(space=place.id),
'proposals': Proposal.objects.filter(space=place.id).order_by('-pub_date'),
'publication': Post.objects.filter(post_space=place.id).order_by('-post_pubdate'),
}
for i in request.user.profile.spaces.all():
if i.url == space_name:
return object_detail(request,
queryset = Space.objects.all(),
object_id = place.id,
template_name = 'spaces/space_index.html',
template_object_name = 'get_place',
extra_context = extra_context,
)
return render_to_response('not_allowed.html', {'get_place': place},
context_instance=RequestContext(request))
Benim sınıf tabanlı görünümü (çalışmıyor ve devam etmek için nasıl hiçbir fikri):
class ViewSpaceIndex(DetailView):
# Gets all the objects in a model
queryset = Space.objects.all()
# Get the url parameter intead of matching the PK
slug_field = 'space_name'
# Defines the context name in the template
context_object_name = 'get_place'
# Template to render
template_name = 'spaces/space_index.html'
def get_object(self):
return get_object_or_404(Space, url=slug_field)
# Get extra context data
def get_context_data(self, **kwargs):
context = super(ViewSpaceIndex, self).get_context_data(**kwargs)
place = self.get_object()
context['entities'] = Entity.objects.filter(space=place.id)
context['documents'] = Document.objects.filter(space=place.id)
context['proposals'] = Proposal.objects.filter(space=place.id).order_by('-pub_date')
context['publication'] = Post.objects.filter(post_space=place.id).order_by('-post_pubdate')
return context
urls.py
from e_cidadania.apps.spaces.views import GoToSpace, ViewSpaceIndex
urlpatterns = patterns('',
(r'^(?P<space_name>\w+)/', ViewSpaceIndex.as_view()),
)
DetailView'ın çalışması için neyi kaçırıyorum?
teşekkürler! Kodu hemen test edeceğim –