如何识别在Django URL的锚?(How to identify an anchor in a

2019-07-19 21:56发布

我在做一个幻灯片,并每张幻灯片具有这样的URL格式: articles/1234#slide=5 。 我想以检索的slide=5部分从URL中我url.py文件,然后把它传递给相应的视图功能,最后,把它传递给模板,使正确的幻灯片。 该URL设置如下:

url(r'^(?P<article_id>\d+)#slide=(?P<current_slide>\d{1,2})$', 'articles.views.show_article')

但它似乎不能得到current_slide从url变量。 我想这事做与锚部分原因它不传输到服务器。 但是,如果我忽略了锚部分在我的网址设置和使用JavaScript来处理这个主题标签,似乎每次我进入浏览器的URL,它首先呈现的页面没有锚部分,然后跳转到正确的幻灯片我想要的。 它不能直接呈现右滑。 我怎么能解决这个问题?

Answer 1:

你打它在你的问题。 该URL的锚部分没有传递到服务器,它仅用于客户端。 为什么不使用标准的GET参数:

articles/1234?slide=5

既然你坚持这个URL格式,你可能想使用某种可能使这更讨人喜欢的动画卷轴,签出这个问题的答案jQuery的平滑滚动到锚?



Answer 2:

没有浏览器发送“#标签”到服务器。

围绕这一共同的方式之一是有一个JavaScript捕获包括hashtag在加载/读取,并调用一个函数来初始化页面(通过AJAX)。

此外,对于这个常用的术语是“hashbang URL”。 如果你对这个词进行搜索,你会发现很多更多的相关信息。

该页面跳来跳去,因为#用于指向页面的锚的HTML规范。 http://example.com/gallery/1234#slide5告诉浏览器去slide5锚上http://example.com/gallery/1234



Answer 3:

锚(#在后位)不是唯一的匹配URL的位的一部分。 它们用于在页面中的锚点(即链接)。 他们一般都是在浏览器的好处(这样浏览器就可以滚动到页面的是位)而不是服务器,但人们似乎有滥用他们这些天。 这并不奇怪,Django不去接他们,因为他们不被视为URL服务器的一个有用的部分。

下面是HTML的旧规范文档,但它仍然是有效的: http://www.w3.org/TR/html4/struct/links.html#h-12.2.3

怎么做:

如果你想在视图中得到这个,看在Request对象。 看在request.path_inforequest.path 。 这会给你完整的URL。 您可以使用正则表达式来从那里提取它。

import re

input = "articles/1234#slide=5"

m = re.search("#slide=([0-9]*)", input)
try:
    print int(m.group(1))
except ValueError:
    print "didn't get a number"

正如罗布说,你应该使用这个GET参数。



文章来源: How to identify an anchor in a url in Django?