【问题标题】:How to send url as slug field into url in Django如何将 url 作为 slug 字段发送到 Django 中的 url
【发布时间】:2021-04-28 04:50:40
【问题描述】:

我的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 作为 urls.py 中的 link 字段,以便我可以通过这种方式从 views.py 检索 db 对象:

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

【问题讨论】:

  • URL 中的字符在路径中无效。您需要以不同的方式传递 URL,在查询字符串 (request.GET) 中将起作用:http://127.0.0.1:8000/link/?link=https://www.geeksforgeeks.org/gate-cs-notes-gq/
  • 如何定义一个 url 和视图来做到这一点。我从来没有使用过?。那么,您能否告诉我们,如何为此编写相应的 url 以及如何在视图中捕获它
  • views.get_text 是做什么的?您可以使用相同的视图来处理传递或不传递 URL 的两种情况
  • 但是,如何判断何时传递了 URL。我在 url 中传递 URL 时遇到问题
  • “?”后面的所有内容会顺利通过,会在request.GET中,不需要声明

标签: python django url view


【解决方案1】:

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

查询字符串中的数据在您的视图中的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'),
]

【讨论】:

    【解决方案2】:

    要重定向,您可以使用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
    

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2018-02-12
      • 1970-01-01
      • 2014-01-13
      • 2018-08-17
      • 2010-12-14
      • 2018-10-22
      • 1970-01-01
      • 2016-01-10
      相关资源
      最近更新 更多