正在根据请求命名空间解析 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
从页面获取命名空间,以便将其用于您的链接。
我正在使用 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
从页面获取命名空间,以便将其用于您的链接。