Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Django模板视图,以防止用户定义的相对url_Html_Django - Fatal编程技术网

Html Django模板视图,以防止用户定义的相对url

Html Django模板视图,以防止用户定义的相对url,html,django,Html,Django,在Django模板中,我呈现存储在数据库中的URL。此URL由用户定义。我不喜欢的是,用户定义了一个相对URL,比如/admin,并重定向到当前服务器域中不相关的地方。有没有办法防止bookmark.url被呈现为相对url?我希望它仅渲染为绝对路径 <div> <a href="{{ bookmark.url }}">{{ bookmark.name }}</a> </div> 注1:{%get\u static\u prefix%

Django
模板中,我呈现存储在数据库中的URL。此URL由用户定义。我不喜欢的是,用户定义了一个相对URL,比如
/admin
,并重定向到当前服务器域中不相关的地方。有没有办法防止
bookmark.url
被呈现为相对url?我希望它仅渲染为绝对路径

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

注1
{%get\u static\u prefix%}
看起来与我的问题无关。请避免链接到这些问题。(以防万一)


注意2:我正在寻找模板视图端的任何解决方案或HTML解决方案。我知道在将模型对象作为
上下文发送之前修改它总是可能的。但是,我并不追求这样的解决方案。另外,我也不喜欢在视图中添加if-else,因为它对于这样一个小的改进来说太难了。

下面的自定义标记应该可以工作

from urllib.parse import urljoin

@register.simple_tag(takes_context=True)
def absolute_url(context, url):
    return urljoin(context.request.build_absolute_uri(), url)
将完全限定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 %}">


不清楚这将如何解决您的问题。用户不能将URL定义为
http://example.com/admin
?@Selcuk,是的。任何绝对URL都可以。我希望URL被呈现为绝对的,而不是相对的。有(也不能)一种内置的方式。在这种情况下,您可以考虑编写自己的模板标签。在URL文件中,您需要确保在该视图之前添加管理员。秩序很重要。你还需要建立一个你不想发生的URL黑名单,当用户试图创建它时,它不允许这样做。此外,如果提供的url是从您的站点发送的,请确保验证它是否是正确的url。是否要在呈现时将相对url转换为绝对url?即使绝对URL在应用程序中的其他地方?