如何重定向到 Django 中的动态 url
How to redirect to a dynamic url in django
我正在做一个 django 项目。在项目中我有一个动态的url如下
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
是动态的 url,我无法重定向。
这是我的观点文件
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)
当发生重定向时,我希望 url 如下所示
http://127.0.0.1:8000/output/test-001
其中 test-001
是模型中的 instance_id。
output_page 应使用 instance_id test-001
过滤模型中的所有数据
解决方案
您问题的直接解决方案如下:
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))
但是,值得研究基于 class 的视图。为此,我建议使用内置的 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
你可以这样做
return redirect(reverse("test:ouput_page",kwargs={'instance':str(instance_id)}))
instance_model = "xyz"
return redirect('output_page', instance=str(instance_model))
(or)
return redirect('test:output_page', instance=str(instance_model))
我正在做一个 django 项目。在项目中我有一个动态的url如下
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
是动态的 url,我无法重定向。
这是我的观点文件
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)
当发生重定向时,我希望 url 如下所示
http://127.0.0.1:8000/output/test-001
其中 test-001
是模型中的 instance_id。
output_page 应使用 instance_id test-001
解决方案
您问题的直接解决方案如下:
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))
但是,值得研究基于 class 的视图。为此,我建议使用内置的 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
你可以这样做
return redirect(reverse("test:ouput_page",kwargs={'instance':str(instance_id)}))
instance_model = "xyz"
return redirect('output_page', instance=str(instance_model))
(or)
return redirect('test:output_page', instance=str(instance_model))