如何在Django 2中将url中的#作为参数传递

时间:2019-09-16 10:45:17

标签: django python-3.x django-urls django-2.0

我正在尝试传递代码“ Req-2019#000001” Django URL。我想同时在URL中传递此代码以及普通的字符串和数字作为参数。

path('generateBomForSingleProduct/<requisition_no>/' , views.generateBomForSingleProduct, name='generateBomForSingleProduct'),

它可以正常工作,但问题是在

之前添加了额外的 /

我的网址现在是

  

http://127.0.0.1:8000/production/generateBomForSingleProduct/Req-2019/#000001

但是我想要这样

  

http://127.0.0.1:8000/production/generateBomForSingleProduct/Req-2019#000001

在我的“#”

前没有多余的“ /”

3 个答案:

答案 0 :(得分:2)

URL中在 # 之后的部分通常不会在页面请求中发送给服务器。因此,不可能将URL作为 /production/generateBomForSingleProduct/Req-2019#000001


解决方法

只需将URL修改为 /production/generateBomForSingleProduct/Req-2019/000001 ,因此您还需要修改视图

# views.py
def generateBomForSingleProduct(request, part_1, part_2):
    unique_id = "{}#{}".format(part_1, part_2)
    # use the "unique_id"
    ...
#urls.py
urlpatterns = [
    ...,
    path('foo/<part_1>/<part_2>/', generateBomForSingleProduct, name="some-name"),
    ...

]

答案 1 :(得分:1)

#之后的部分称为片段标识符,浏览器使用该片段标识符,而从未将其发送到服务器。

http://127.0.0.1:8000/production/generateBomForSingleProduct/Req-2019/#000001中,URL 000001从未发送到服务器。因此,在#之后使用url的重要部分是没有用的。最好将000001作为查询参数或单独的参数传递。

答案 2 :(得分:1)

使用“ get”将是正确的方法。 #用于html片段,这些片段不会发送到服务器。为什么不能只是

/production/generateBomForSingleProduct/Req-2019?code=000001,然后您以这种方式处理视图中的所有内容?