Django:如何在应用程序 URL 中将整个 URL 作为参数传递?

Django: how to pass an entire URL as a parameter inside the app URL?

我试图在我的应用程序中传递完整的 length/structure URL 作为应用程序 URL 中的参数。例如,我希望能够执行以下操作: myapp.com/https://www.youtube.com/watch?v=dQw4w9WgXcQ 以便我可以将在我的应用程序主页之后输入的 URL 并存储。但是,我认为当粘贴的 URL 包含片段和查询参数(即:包含 # and/or ?)时,应用程序会感到困惑。我的 urls.py 看起来像这样:

url(r'^(?P<url_param>[a-zA-Z0-9_.-/:?=#]*)/$', views.anywebsiteentered, name='anywebsiteentered')

当我尝试编写如下所示的视图以获取输入的 URL 并将其保存在模型对象中时,我总是在查询和片段字符之前截断 URL,我该怎么做才能让我的应用程序获取整个 URL 字符串?

def anywebsiteentered(request, url_param = 'url_param'):
    UrlBlob.objects.create(fullurl=url_param)

例如,如果我的应用程序仅在 myapp.com/https://www.youtube.com/watch?v=dQw4w9WgXcQ returns https://www.youtube.com/watch 而不是 URL 的查询部分,则创建上述对象。我怀疑这是我在传递 URL 时所做的事情,因为当我在 python-django shell 中手动创建此模型对象时,根本没有问题。

感谢您的帮助和提示。对此,我真的非常感激。

如果您需要在另一个 url 的 "path" 区域使用一些 url,您应该转义它的特殊字符。例如,使用 %3F 代替“?”。这叫做url转义。

为了您的目的,最好将 url 作为参数传递,例如:

myapp.com/?url=http://www.youtube.com/watch?v=dQw4w9WgXcQ

— 浏览器会在这种情况下进行必要的转义。

您可以从 request.META:

获取查询字符串
def anywebsiteentered(request, url_param='url_param'):

    full_url = url_param
    query_string = request.META['QUERY_STRING']
    if query_string:
        full_url += u'?' + query_string

    UrlBlob.objects.create(fullurl=full_url)