Django模板视图,可防止用户定义相对网址

时间:2019-12-22 23:02:52

标签: html django

Django模板中,我呈现了存储在数据库中的URL。该URL由用户定义。我不喜欢用户定义一个相对URL,例如/admin并重定向到当前服务器域中不相关的某个位置。有什么方法可以防止将bookmark.url渲染为相对URL?我希望仅将其呈现为绝对路径。

<div>
    <a href="{{ bookmark.url }}">{{ bookmark.name }}</a>
</div>

注释1 {% get_static_prefix %}似乎与我的问题无关。请避免链接到这些问题。 (以防万一)

注释2 :我追求模板视图方面的任何解决方案或HTML解决方案。我知道在将模型对象作为context发送之前总是可以对其进行修改。但是,我不追求这种解决方案。另外,我也不喜欢在视图中添加if-else,因为对于这样的微小改进来说,if-else太多了。

1 个答案:

答案 0 :(得分:0)

以下自定义标记应起作用

from urllib.parse import urljoin

@register.simple_tag(takes_context=True)
def absolute_url(context, url):
    return urljoin(context.request.build_absolute_uri(), url)

R DBI ODBC error: nanodbc/nanodbc.cpp:3110: 07009: [Microsoft][ODBC Driver 13 for SQL Server]Invalid Descriptor Index会将完全限定的URL和相对路径转换为完全限定的URL,并使用右手参数替换该路径

>>> urllib.parse.urljoin('http://somewebsite.com/foo/bar/', '/hello')
'http://somewebsite.com/hello'

但是,如果右手参数已经是完全限定的URL,它将返回该URL

>>> urllib.parse.urljoin('http://somewebsite.com/foo/bar/', 'http://someotherwebsite.com/')
'http://someotherwebsite.com/'

然后,在加载自定义标签后,您可以像这样使用它

<a href="{% absolute_url bookmark.url %}">