django url解析格式化的url

时间:2013-10-06 14:08:25

标签: django django-urls

我正处于单页网络应用程序的设计阶段,并希望用户可以点击格式化的URL,数据请求将加载到页面中。

例如,http://www.mysite.com/?category=some_cat的网址会触发Category视图及相关数据。

我的目的是解析URL,收集数据,然后将其传递给index.html模板,以便在页面加载时呈现。加载页面后,Javascript触发器设置将触发相应的按钮以加载客户端视图。

但是,我在设置URL解析器时遇到问题,因为以下设置与上面的示例网址不匹配。

from app.views import app_views, photo_views, user_views, admin_views

urlpatterns = patterns("",
    url(r'^/(?P<category>\d+)/$', app_views.index)
)

1 个答案:

答案 0 :(得分:1)

通过您的网址向GET发送信息并使用视图功能的参数格式化您的网址时,您会感到困惑。假设我正在访问名为http://www.mysite.com/的网站,该网页的表单如下所示:

<form>
<input type='text' name='category' id='category'></input>
<button type='submit'>Send!</button>
</form>

点击后,网址会自动更改为http://www.mysite.com/?category=<value of input>?标记后面的所有内容都应被视为GET数据,语法为<id>=<value>。然后你可以这样访问它们:

def response(request):
    category = request.GET['category']

格式化网址不同,因为这意味着要查找网址的模式。即看起来像r'^/(?P<category>\d+)/$'的模式会查找:http://www.mysite.com/<category>/并将其作为附加参数发送到您的视图中的请求,如下所示:

def response(request, category):
    ...

正则表达式用于定义如何识别网址的这一部分。例如,您使用的\d+表示类别必须是数字。您可以根据需要搜索如何定义不同类型的模式

请注意,使用GET,您将数据发送到呈现您当前正在访问的网页的相同视图功能,而使用不同的网址意味着您告诉它在哪里通过您的urls.py (通常是不同的功能)。这会让事情变得更清楚吗?