在django中使用锚定的URL(由http对象的id锚定)

时间:2014-04-25 18:18:01

标签: django url

我在前端开发方面的水平相当低。

尽管如此,我想实现将几个部分锚定在一个页面而不是几个单独页面中的非常广泛的行为,并在URL中引用这些部分。

所以我没有将mysite.com/how_to_walkmysite.com/how_to_run作为两个不同的网页和模板,而是希望有一个页面mysite.com/how_to_do_stuff,然后根据您是否要#walk#run,请参阅带有id字段的html标题作为网址的后缀。

我真的不知道如何用django做到这一点。我想创建一个url调度程序 - 我猜 - 看起来像这样:

url(r'^how_to_stuff/#(?P<partId>[-\w]*)', views.how_to, name='how_to')

...然后我必须创建一个简单的视图,但是如何在render()调用中引用id,我不知道。

2 个答案:

答案 0 :(得分:1)

我找到了自己问题的答案。关键因素是,当客户端(浏览器)访问此类锚定网址mysite.com/how_to_do_stuff#run时,它会向服务器仅发送根网址mysite.com/how_to_do_stuff,然后将锚点应用于它在当地。所以你需要:

  1. 一种经典,简单的网址/视图/模板组合,可在客户询问网页时加载网页mysite.com/how_to_do_stuff
  2. 将客户端发送到这些锚定页面并引用它们进行开发的方法。我通过其他网址/视图夫妇将客户端重定向到正确的锚定网址。
  3. 结果如下:

    在urls.py中:

    ...
    url(r'^how_to_do_stuff/(?P<part_id>[-\w]+)', views.how_to_redirect, name='how_to'),
    url(r'^how_to_do_stuff', views.how_to)
    

    在views.py中:

    def how_to_redirect(request, part_id):
        return HttpResponseRedirect("/how_to_do_stuff/#"+part_id)
    
    def how_to(request):
         return render(request, "GWSite/how_to_do_stuff.html")
    

    然后我在模板中通过以下方式引用这些:

    {% url "how_to" "run"}
    

答案 1 :(得分:0)

来自django project website

看看他们如何将num var发送到views.py

# URLconf
from django.conf.urls import url

urlpatterns = [
    url(r'^blog/$', 'blog.views.page'),
    url(r'^blog/page(?P<num>[0-9]+)/$', 'blog.views.page'),
]

# View (in blog/views.py)
def page(request, num="1"):
    # Output the appropriate page of blog entries, according to num.
    ...