我正在进行幻灯片放映,每张幻灯片都有这样的网址格式:articles/1234#slide=5
。我想从url.py文件中的url中检索slide=5
部分,然后将其传递给相应的视图函数,最后将其传递给模板并渲染右侧幻灯片。网址设置如下:
url(r'^(?P<article_id>\d+)#slide=(?P<current_slide>\d{1,2})$', 'articles.views.show_article')
但它似乎无法从网址获取current_slide
变量。我想它与锚点部分有关,因为它没有转移到服务器上。但是如果我忽略我的网址设置中的锚点部分并使用javascript来处理这个标签,似乎每次我在浏览器中输入网址时,它首先渲染没有锚点部分的页面,然后跳转到我想要的右侧幻灯片。它无法直接呈现正确的幻灯片。我怎么能解决这个问题?
答案 0 :(得分:5)
你在问题中遇到了它。 URL的锚点部分未传递给服务器,它仅用于客户端。为什么不使用标准的get参数:
articles/1234?slide=5
由于你坚持使用这种网址格式,你可能想要使用某种类型的动画卷轴,这可能会减少这种问题,请查看这个问题的答案jquery smooth scroll to an anchor?
答案 1 :(得分:2)
没有浏览器将“hashtag”发送到服务器。
其中一个常见方法是让javascript在加载/读取时捕获主题标签,并调用函数初始化页面(通过ajax)。
此外,常见的术语是“hashbang url”。如果您搜索该术语,您将找到更多相关信息。
页面正在跳转,因为#用于指向HTML规范中的页面锚点。 http://example.com/gallery/1234#slide5
告诉浏览器转到slide5
http://example.com/gallery/1234
锚点
答案 2 :(得分:0)
锚点(#后面的位)不是匹配的URL位的一部分。它们用于页面内的锚点(即链接)。它们通常是为了浏览器的利益(因此浏览器可以滚动到页面的那一部分)而不是服务器,但是这些天人们似乎在滥用它们。 Django不会选择它们并不奇怪,因为它们不被认为是服务器URL的有用部分。
以下是旧版HTML规范的文档,但它仍然有效:http://www.w3.org/TR/html4/struct/links.html#h-12.2.3
怎么做:
如果要在视图中显示此内容,请查看Request对象。查看request.path_info
或request.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"
正如Rob所说,你应该为此使用get参数。