繁体   English   中英

Django重定向到另一个应用程序中的其他视图

[英]Django redirecting to a different view in another app

在Stack Overflow上有很多类似的问题要解决,但没有一个可以解决我的问题。

我有一个基于类的视图,该视图接受文件,一旦找到有效文件,我希望网站将用户重定向到另一个应用程序内的模板,并传入一些参数。

我已经看到其他人在“ urlpatterns”中添加了一条额外的路径,并从那里获得了视图。 但这只会在命令提示符下发出GET信号,而实际上并未更改Web URL。

views.py

from django.shortcuts import render, redirect   # used to render templates
from django.http import JsonResponse
from django.views import View

from .forms import UploadForm
from .models import FileUpload

class UploadView(View):
    def get(self, request):
        files_list = FileUpload.objects.all()
        return render(self.request, 'upload/upload.html', {'csv_files': files_list})

def post(self, request):
    form = UploadForm(self.request.POST, self.request.FILES)
    if form.is_valid():
        csv_file = form.save()
        data = {'is_valid': True,
                'name': csv_file.file.name,
                'url': csv_file.file.url,
                'date': csv_file.uploaded_at}
        # REDIRECT USER TO VIEW PASSING 'data' IN CONTEXT
        return redirect('graph:chart', file_url=csv_file.file.url)
    else:
        data = {'is_valid': False}
    return JsonResponse(data)

urls.py

from django.urls import path
from . import views

app_name = "upload"

urlpatterns = [
    path('', views.UploadView.as_view(), name='drag_and_drop'),
]

(其他应用程序的)urls.py

from django.urls import path
from . import views

app_name = "graph"

urlpatterns = [
    path('', views.page, name='chart'),
]

您可以指定一个应用名称,并在开始时完全使用redirect快捷方式: https : //docs.djangoproject.com/en/2.1/topics/http/urls/#naming-url-patterns

在另一个应用程序urls.py定义app_name = 'other_app' ,然后使用redirect(other_app:url_name', parameter1=p1, parameter2 = p2)

您可以使用path (Django> = 2.0)或url (Django> = 2.0的re_path )轻松命名参数,例如:


from django.urls import path

from . import views

urlpatterns = [
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM