7

我正在尝试做一些 Django URL 匹配。

我想要一些我有http://mysite.com/base?sort=type1/http://mysite.com/base?sort=type2/等的网址。

我不知道如何通过 URL 匹配这些表达式:我对 Django 很陌生,以前从未使用过 Reg Ex。

我的“基础”应用程序中的 urls.py 是:

url(r'^$','base.views.main, name='main'),

我不知道该放什么来匹配我的网址和问号。

我正在尝试类似的东西

url(r'^?sort=popular/$', 'base.views.main_popular', name='main_popular'),

感谢帮助!

4

3 回答 3

8

您没有将这些与正则表达式匹配。后面的元素?不是 URL 的一部分,它们是查询参数,可以通过request.GET.

于 2012-08-22T18:50:04.840 回答
6

? 不会匹配“?” 在 url 中,它有自己的含义,您可以在此处查找:
Python 正则表达式 如果您想匹配“?”的确切字符 在您的 url 中,您必须以某种方式对其进行转义(因为它在 RegExs 中具有含义),因此您可能想通过“\”(反斜杠)对其进行转义,因此您可以编写 \?sort ....

编辑:
好的,你在评论中所说的,似乎这是你的问题,main?sort=popular当你/main/使用GET方法字典参数渲染模板时,你的 url 模式上会发生sort=popular,只需编写一个区分GET和的函数POST,在GET部分中,喜欢某物sort_by = request.GET.get('sort',''),然后使用 sort_by 变量的值进行相应的排序,就像:

def main_handler(request):
     if request.method == "POST":
           whatever ... 
     if request.method == "GET" :
           sort_by = request.GET.get('sort','')
           if sort_by:
                 sort by what sort points to 
                 return "the sorted template"
     return render_to_response(the page and it's args)

然后放手?在 url 模式中,当您请求带有 GET 参数的页面时添加。

于 2012-08-22T19:00:33.520 回答
0

你不需要这个。相反,您可以制作一个通用模板和视图。

#And this is the views.py
def main_handler(request):
    if request.method == "GET":
        sort_parameter = request.GET.get('sort')
        if sort_parameter:
             #the code to sort the database objects on basis of the sort parameter
             return render(The template and its kwargs)
        #your other code

您的 urls 文件应如下所示:

urlpatterns = [
url(r'base/', 'base.views.thecommonview', name='main'),
]

于 2020-10-22T17:06:38.713 回答