【问题标题】:How to redirect to a dynamic url in django如何重定向到 django 中的动态 url
【发布时间】:2020-12-26 19:51:43
【问题描述】:

我正在做一个 django 项目。在项目中我有一个动态网址如下

app_name = 'test'

urlpatterns = [
    path('root', views.root, name='root'),
    path('output/<str:instance>', views.output_page, name='output_page'),
]

应用程序中有两个页面。在root 页面中存在一个表单,提交时应重定向到output_page。但因为output_page 是动态网址,所以我无法重定向。

这是我的意见文件

def root(request):
    if request.method == 'POST':

        name = request.POST.get('name')
        job = request.POST.get('job')

        return redirect("test:output_page")

    return render(request, 'test/root.html')

def output_page(request, instance):

    record = Object.objects.all(Instance_id=instance)

    return render(request, 'test/output_page.html', {'record': record})

这是模型

class Object(models.Model):
    Name = models.CharField(max_length=200, null=True, blank=True)
    Job = models.CharField(max_length=200, default="")
    Instance_id = models.CharField(max_length=200)

当重定向发生时,我希望网址如下

http://127.0.0.1:8000/output/test-001

其中test-001 是模型中的instance_id。

output_page 应该过滤模型中 instance_id test-001 的所有数据

【问题讨论】:

标签: python django redirect django-models dynamic-url


【解决方案1】:

你可以这样做

return redirect(reverse("test:ouput_page",kwargs={'instance':str(instance_id)}))

【讨论】:

  • 嗨。我现在收到此错误Reverse for 'output_page' with no arguments not found. 1 pattern(s) tried: ['output/(?P&lt;instance&gt;[^/]+)$']
  • instance 在 URL 中作为字符串给出,因此您需要在 kwargs 中发送 str(instance_id)
  • 嗨。我解决了错误。我已经参考了模板中的页面。一旦我删除它,错误就解决了。非常感谢
【解决方案2】:

解决方案

您的问题的直接解决方案如下:

from django.urls import reverse
from django.shortcuts import get_object_or_404
...
instance = get_object_or_404(Object, name=name, job=job)
redirect(reverse('test:output_page', args=instance))

但是,值得研究基于类的视图。为此,我建议使用 django 内置的 RedirectView

参考文献

Django 反向:https://docs.djangoproject.com/en/3.1/ref/urlresolvers/

Django 重定向视图:https://docs.djangoproject.com/en/3.1/ref/class-based-views/base/#redirectview

【讨论】:

  • 感谢您的回复。我现在收到此错误output_page() missing 1 required positional argument: 'instance'
  • 您可以将 args 和 kwargs 传递给 reverse 函数。我已经更新了我的答案以反映这一点,但它也在参考文档中注明。
  • 嗨。我现在收到此错误Reverse for 'output_page' with no arguments not found. 1 pattern(s) tried: ['output/(?P&lt;instance&gt;[^/]+)$']
  • 重定向前需要确保实例存在并传入。
  • 嗨。我解决了错误。我已经参考了模板中的页面。一旦我删除它,错误就解决了。非常感谢
【解决方案3】:
instance_model = "xyz"
return redirect('output_page', instance=str(instance_model))
(or)
return redirect('test:output_page', instance=str(instance_model))

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多