Django перенаправляет на другое представление в другом приложении - PullRequest
0 голосов
/ 07 марта 2019

У меня много похожих вопросов о переполнении стека, но ни один из них не решает мою проблему.

У меня есть представление на основе классов, которое принимает файлы, и как только будет найден правильный файл, я бы хотел, чтобы веб-сайт перенаправлял пользователя к шаблону в другом приложении, передавая некоторые параметры.

Я видел, как другие помещали дополнительный путь в 'urlpatterns' и получали представление оттуда. Но это только делает GET-сигнал в моей командной строке, но не меняет 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'),
]

1 Ответ

1 голос
/ 07 марта 2019

Вы можете указать имя приложения и использовать в точности ярлык 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 (re_path для Django> = 2.0), например:


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),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...