Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用路径函数识别问号_Python_Regex_Django_Url - Fatal编程技术网

Python 无法使用路径函数识别问号

Python 无法使用路径函数识别问号,python,regex,django,url,Python,Regex,Django,Url,我正在开发django web应用程序。我正在尝试实现一个搜索字段,该字段将与url“通信” 我想从http://127.0.0.1:8000/contract/当我在搜索字段中输入id时,它会将我重定向到http://127.0.0.1:8000/contract/id 问题是,当使用搜索字段时,它会将我重定向到http://127.0.0.1:8000/contract/?search=id这其实不是什么问题。但当我试图定义urlpattern时,它无法“识别”url中的问号。结果是我无法访

我正在开发django web应用程序。我正在尝试实现一个搜索字段,该字段将与url“通信”

我想从
http://127.0.0.1:8000/contract/
当我在搜索字段中输入id时,它会将我重定向到
http://127.0.0.1:8000/contract/id

问题是,当使用搜索字段时,它会将我重定向到
http://127.0.0.1:8000/contract/?search=id
这其实不是什么问题。但当我试图定义urlpattern时,它无法“识别”url中的问号。结果是我无法访问正确的模板

urlpatterns = [
    path('?search=<id_contract>/', app_views.view_contract),
    path('', app_views.contract, name='my_contract'),
]
urlpatterns=[
路径(“?搜索=/”,应用程序视图。查看合同),
路径(“”,app_views.contract,name='my_contract'),
]
我看到了两种可能的解决方案:要么我会尝试找到一种方法来消除这个问号,但我还没有真正找到去做的方法,所以我非常感谢你的帮助

第二种选择是使用正则表达式,但我到目前为止尝试的方法不起作用:

re_path(r'.+\?.*'+'search'+'(?P<id_contract>)/$'
re_路径(r'.+\?.'+'search'+'(?P)/$'

Django使用请求路径来确定要应用哪些url模式。路径就是您的
http://domain:port/
URL的一部分,在
之前?arg1=value1&arg2=value2
部分。在这两种情况下,路径都是
contract/


要在
之后处理参数,您应该使用
request.args
或其他方法在端点中编写特定的代码。但是,在您的情况下,我认为您应该停止使用默认搜索表单,编写一些JavaScript,使其根据需要导航到
合同/id

http://domain:port/URL的一部分,在
之前?arg1=value1&arg2=value2
部分。在这两种情况下,路径都是
contract/


要在
之后处理参数,您应该使用
request.args
或其他方法在端点中编写特定的代码。但是,在您的情况下,我认为您应该停止使用默认搜索表单,编写一些JavaScript使其根据需要导航到
合同/id

一种可能性是:

urlpatterns = [
    url(r'^contract/(?P<id_contract>\d+)/$', app_views.view_contract),
]

端点看起来像1234是合同的id。

一种可能性是:

urlpatterns = [
    url(r'^contract/(?P<id_contract>\d+)/$', app_views.view_contract),
]

端点看起来像是1234是合同的id。

要处理查询参数(问号
后面的部分),使用类似python字典的方法

在您的情况下,
?search=id
将导致
请求。获取包含
{'search':'id'}
。您可以使用以下代码行的内容:

urlpatterns = [
    path('', app_views.contract, name='my_contract'),
]

def view_contract(request):
    search_value = request.GET.get('search', '')

    # do something if it meets certain conditions
    if search_value == 'id':
        # here you could do your redirect if its still needed
        return redirect('...')

    return render(request, 'template_name.html', {'search': search_value})

要处理查询参数(问号
后面的部分),请使用,其行为类似于python字典

在您的情况下,
?search=id
将导致
请求。获取包含
{'search':'id'}
。您可以使用以下代码行的内容:

urlpatterns = [
    path('', app_views.contract, name='my_contract'),
]

def view_contract(request):
    search_value = request.GET.get('search', '')

    # do something if it meets certain conditions
    if search_value == 'id':
        # here you could do your redirect if its still needed
        return redirect('...')

    return render(request, 'template_name.html', {'search': search_value})

我建议将此作为真实答案。它做的事情与您想要的一样,更像是一个“官方”url,而不是使用GET查询。我建议将此作为真实答案。它做的事情与您想要的一样,更像是一个“官方”url,而不是使用GET查询。