[英]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.