我的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')
]
当我输入url
如http://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