如何在Django中把url作为一个字段发送到url



我的urls.py是这样的:

from django.urls import path
from . import views
urlpatterns = [
path('link',views.get_text,name='text'),
path('link/<link>',views.show,name='show')
]

当我输入urlhttp://127.0.0.1:8000/link/https://www.geeksforgeeks.org/gate-cs-notes-gq/时,它显示页面未找到,因为它正在检查slug url中的/。我在数据库中存储url和其他字段,所以我想使用url检索数据库对象。如何做到这一点,当我在浏览器中输入url时,它将整个url作为url .py中的link字段,以便我可以以这种方式从views.py检索db对象:

def show(request,link):
objs = Links.objects.filter(link=link).values()
return HttpResponse('link')

在请求URL的查询字符串中传递URL:http://127.0.0.1:8000/link/?link=https://www.geeksforgeeks.org/gate-cs-notes-gq/

来自querystring的数据可以在视图中的request.GET字典中找到

def link_view(request):
if 'link' in request.GET:
objs = Links.objects.filter(link=request.GET['link']).values()
return HttpResponse(...)
else:
# Handle no link provided (views.get_text)

你的url模式只需要定义一个路径来处理提供或不提供url的两种情况

urlpatterns = [
path('link/', views.link_view, name='link_view'),
]

要重定向,可以使用HttpResponseRedirect。它将重定向url而不指定视图。如果您写入HttpResponseRedirect('/link'),它将重定向到http://127.0.0.1:8000/link。既然你提到了从另一个视图重定向,你可以这样做:

def link_view(request):
if 'link' in request.GET:
objs = Links.objects.filter(link=request.GET['link']).values()
return HttpResponse(...)
else:
# do something when no link provided (views.get_text)
return HttpResponseRedirect('/link?'+str(link))#str(link) is the url you want to get