Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django CMS apphooks菜单和反转_Python_Django_Python 2.7_Django Cms - Fatal编程技术网

Python Django CMS apphooks菜单和反转

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

我正在尝试在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.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'])