我正在使用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'),
答案 0 :(得分:0)
对此的最佳解决方案是为您的应用程序提供配置模型。然后它可以针对每个实例使用该配置。
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
从页面获取名称空间,以便将其用于链接。