[英]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.