繁体   English   中英

根据请求名称空间解析URL

[英]Resolving URL based on Requesting Namespace

我正在使用DjangoCMS构建一个网站,该网站具有大约10个同一应用程序实例。 这些不同的实例将仅用于在不同页面上提供不同的文件。

一切正常,除了当我转到应用程序的其他实例并转到详细信息视图时,它还原为原始应用程序的URL和名称空间。

例如,转到/university/term-syncc/并在列表视图中单击某个项目,会将我重定向到/marketing/4/或该项目的ID。

如果我转到/university/term-syncc/4/则可以,但是我无法获取该URL来自动解析。 我知道它与我的get_absolute_url调用assets名称空间有关,但是如何强制它检查当前应用程序名称空间,然后从那里运行反向操作呢?

models.py

def get_absolute_url(self):
    return reverse("assets:asset_detail", kwargs={"id": self.id})

HTML

<li>
    <a href="{{obj.get_absolute_url}}">{{ obj.name }} test</a>
</li>

urls.py

url(r'^$', asset_list_view, name="asset_list"),
url(r'^(?P<id>\d+)/$', asset_detail_view, name='asset_detail'),

最好的解决方案是为您的应用程序提供配置模型。 然后,它可以针对每个实例使用该配置。

pip install aldryn-apphooks-config

首先,文档在这里; http://docs.django-cms.org/en/latest/how_to/namespaced_apphooks.html#aldryn-apphooks-config

通过实现此解决方案,您的方法将变成这样。

class Asset(models.Model):

    app_config = AppHookConfigField(
        AssetConfig,
        verbose_name=_('Config'),
        help_text='',
    )

    def get_absolute_url(self):
        """Returns the url for this object."""
        if self.app_config and self.app_config.namespace:
            namespace = '{0}:'.format(self.app_config.namespace)
        else:
            namespace = ''

        return reverse(
            '{0}assets:asset_detail'.format(namespace),
            kwargs={"id": self.id}
        )

无需安装此应用程序,您仍可以使用页面高级设置上的“ Application instance name字段为应用程序挂钩命名空间。 您可以改用它,但是它需要args / kwargs传递。

在视图或模板中,您可以执行request.current_page.application_namespace来从页面获取名称空间,以便将其用于链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM