我正在尝试在 django cms 中实现一个图库应用程序。
我想要这样的网址:www.site-url.com/gallery/category/gallery-name
我的解决方案无法完全正常工作。如果我访问这个网址http://127.0.0.1:8000/en/gallery/1001/test/其中“1001”是一个类别,“test”是画廊名称,我想检查一个类别是否存在以及画廊是否属于该类别。
下一个问题是,如果我想使用 get_absolute_url()
方法获取画廊的完整 url。我的 urls.py 实现得不好,所以它不起作用。
我的urls.py:
from django.conf.urls import patterns, url
from .views import GalleryListView, GalleryDetailView
urlpatterns = patterns('',
# List View
url(r'^(?P<parent_slug>[-\w]+)/(?P<slug>[-\w]+)/$', GalleryDetailView.as_view(), name="gallery_detail"),
url(r'^$', GalleryListView.as_view(), name="gallery_list"),
)
我的模型.py:
class Category(Sortable): parent = models.ForeignKey('self', blank=True, null=True) name = models.CharField() slug = AutoSlugField(populate_from='name') def __unicode__(self): return self.name def get_absolute_url(self): return "#" class Gallery(Sortable): name = models.CharField() parent = models.ForeignKey(Category, blank=False, null=True) slug = AutoSlugField(populate_from='name') def __unicode__(self): return self.name def get_absolute_url(self): return reverse('gallery_detail', args=[self.pk])
最佳答案
您希望您的 get_absolute_url
方法与此 URL 模式匹配,
url(r'^(?P<parent_slug>[-\w]+)/(?P<slug>[-\w]+)/$', GalleryDetailView.as_view(), name="gallery_detail"),
因此您需要提供两个参数,父级 slug 和图库的 slug:
class Gallery(Sortable):
def get_absolute_url(self):
return reverse('gallery_detail', args=[self.parent.slug, self.slug])
要在 GalleryDetailView
中获取正确的对象,您需要重写 get_object
方法。您可以从 self.kwargs
访问 slugs。
GalleryDetailView(DetailView):
...
def get_object(self, queryset=None):
if queryset is None:
queryset = self.get_queryset()
return queryset.get(parent__slug=self.kwargs['parent_slug'], slug=self.kwargs['slug'])
关于python - Django-CMS apphooks 菜单和反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360117/