Python Django CMS apphooks菜单和反转
我正在尝试在django cms中实现一个画廊应用程序 我想要这样的url:www.site-url.com/gallery/category/gallery-name 我的解决方案没有完全奏效。如果我转到这个url,其中“1001”是一个类别,“test”是库名,我想检查是否存在一个类别以及库是否属于这个类别 下一个问题是,如果我想使用Python Django CMS apphooks菜单和反转,python,django,python-2.7,django-cms,Python,Django,Python 2.7,Django Cms,我正在尝试在django cms中实现一个画廊应用程序 我想要这样的url:www.site-url.com/gallery/category/gallery-name 我的解决方案没有完全奏效。如果我转到这个url,其中“1001”是一个类别,“test”是库名,我想检查是否存在一个类别以及库是否属于这个类别 下一个问题是,如果我想使用get\u absolute\u url()方法获取图库的完整url。我的url.py实现得不好,因此无法正常工作 my URL.py: from django
get\u absolute\u url()
方法获取图库的完整url。我的url.py实现得不好,因此无法正常工作
my URL.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"),
)
来自django.conf.url导入模式,url
从.views导入GalleryListView、GalleryDetailView
urlpatterns=模式(“”,
#列表视图
url(r'^(?P[-\w]+)/(?P[-\w]+)/$),GalleryDetailView.as_view(),name=“gallery_detail”),
url(r'^$',GalleryListView.as_view(),name=“gallery_list”),
)
my models.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])
类别(可排序):
parent=models.ForeignKey('self',blank=True,null=True)
name=models.CharField()
slug=AutoSlugField(从class='name'填充_)
def ___; unicode(自):
返回self.name
def get_绝对_url(自身):
返回“#”
课堂资料(可分类):
name=models.CharField()
父项=模型.ForeignKey(类别,空白=假,空=真)
slug=AutoSlugField(从class='name'填充_)
def ___; unicode(自):
返回self.name
def get_绝对_url(自身):
返回反向('gallery_detail',args=[self.pk])
您希望您的
get\u absolute\u url
方法与此url模式匹配
url(r'^(?P<parent_slug>[-\w]+)/(?P<slug>[-\w]+)/$', GalleryDetailView.as_view(), name="gallery_detail"),
要在GalleryDetailView
中获取正确的对象,需要重写get\u object
方法。您可以从self.kwargs
访问slug
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'])
最后,我在这个youtube教程中找到了get_absolute_url()方法的解决方案 我在models.py中修改了get_absolute_url(),如下所示:
def get_absolute_url(self):
return reverse('gallery:gallery_detail', kwargs={'slug': self.slug, 'parent_slug': self.parent.slug})
其中“gallery”是cms_apps.py中的app_名称:
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
from .cms_menus import GalleryMenu
class GalleryApp(CMSApp):
name = _('Gallery')
urls = ['app.apps.gallery.urls', ]
app_name = 'gallery'
menus = [GalleryMenu]
apphook_pool.register(GalleryApp)
然后我想检查一个类别是否存在,一个画廊是否属于这个类别
根据阿拉斯代尔的回答:
要在GalleryDetailView中获取正确的对象,需要
重写get_对象方法。您可以从中访问蛞蝓
self.kwargs
谢谢你的帮助。我必须删除queryset,检查正在工作。但是我仍然用get\u absolute\u url方法出错,应该是
queryset=None
。现在已修复。get\u absolute\u url
会给你什么错误?你是如何包含库URL的?我正在学习本教程,我得到的菜单GalleryMenu:4无法加载。请确保其所有URL都存在并且可以解析。无法加载菜单GalleryMenu:3。请确保其所有URL都存在并且可以解析。如果您使用的是命名空间,则需要执行reverse('my\u namespace:gallery\u detail',…)
。我不熟悉apphooks,因此没有其他建议。我会更新你的问题你的问题提到apphooks,并包括任何相关的代码。
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
from .cms_menus import GalleryMenu
class GalleryApp(CMSApp):
name = _('Gallery')
urls = ['app.apps.gallery.urls', ]
app_name = 'gallery'
menus = [GalleryMenu]
apphook_pool.register(GalleryApp)
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'])