Как передать контекст Django, чтобы создать приложение реагировать - PullRequest
0 голосов
/ 06 марта 2019

Я настроил приложение create-реакции-приложение с django, следуя этому примеру.Веб-страница передается в следующих представлениях:

def get(self, request):
        try:
            with open(os.path.join(settings.REACT_APP_DIR, 'build', 'index.html')) as f:
                return HttpResponse(f.read())

Я пытаюсь передать ему conext (conext = {'foo': 'bar'}).

Я пытался через get_context_data :

class MyView(DetailView):
    """
    Serves the compiled frontend entry point (only works if you have run `yarn
    run build`).
    """
    def get(self, request):
        try:
            with open(os.path.join(settings.MY_VIEW_DIR, 'build', 'index.html')) as f: 
                return HttpResponse(f.read())
        except FileNotFoundError:
            return HttpResponse(
                """
                This URL is only used when you have built the production
                version of the app. Visit http://localhost:3000/ instead, or
                run `yarn run build` to test the production version.
                """,
                status=501,
            )

    def get_context_data(self, *args, **kwargs):
        context = super(MyView. self).get_context_data(*args, **kwargs)
        context['message'] = 'Hello World!'
        return context

Я также пытался превратить веб-страницу в шаблон и вернуть

return render(request, 'path/to/my/index.html', {'foo':'bar'})

Но это тольковозвращает страницу без моего кода реагирования.

Есть ли лучший способ реализовать приложение create-Reaction-app с помощью django или способ преобразования кода реагирования в шаблон?

1 Ответ

0 голосов
/ 11 марта 2019

Я думаю, что ответ - превратить это в шаблон вместо передачи статического файла.

settings.MY_VIEW_DIR - это путь к встроенному index.html, поэтому я только что передал его в загрузчик шаблонов в settings.py:

MY_VIEW_DIR = os.path.join(BASE_DIR, "path","to","my","build","folder")

TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [
                os.path.join(BASE_DIR, 'templates'),
                MY_VIEW_DIR
            ],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]

С этим я могу просто использовать этово взглядах:

def get(self, request):
        return render(request, 'build/index.html', {'foo':'bar'})

и все работает.

...