Как я могу добавить свой собственный атрибут в методе django as_view ()? - PullRequest
1 голос
/ 28 января 2020

Я хочу добавить свой собственный атрибут 'fileName' внутри метода 'as_view ()'

path('dialogs/', CodeResponseView.as_view(fileName='Dialogs.py')),

Django выдать мне ошибку:

TypeError: CodeResponseView() received an invalid keyword 'fileName'. as_view only accepts arguments that are already attributes of the class.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2020

вы можете добавить свой атрибут. Ваш в случае 'имя файла' как в контексте.

, если вы хотите передать и использовать на стороне шаблонов, справка полна, когда вы используете DetailView , ListView , CreateView , TemplateView et c generi c представление на основе класса

есть два пути:


1. Первый способ - это аргумент передачи в функции as_view. Здесь нет необходимости передавать на стороне вида или на вид, если у вас есть модель, которую вы также можете передать в urls.py в другом ключевом аргументе model = <название вашей модели>

urls.py

path('dialogs/', CodeResponseView.as_view(extra_context={'fileName':'Dialogs.py')),

Тогда Вы можете получить доступ к атрибуту имени файла на стороне шаблона, например,

Ваш файл шаблона

<h1> My file name is : {{ filename }} </h1>

Вывод:

My file name is Dialogs.py


2. Второй способ назначить словарь extra_context в вашем классе представления, который вы определяете как view.py file

urls.py

path('dialogs/', CodeResponseView.as_view()),

views.py Здесь вам не нужно переопределять метод get_context_data для передачи имя файла

class CodeResponseView(DetailView):
    extra_context={'filename':'Your File name'}
    model=models.<model-name> # here your model name 

Затем вы можете получить доступ к атрибуту имени файла в сторона шаблона, например

Файл вашего шаблона

<h1> My file name is : {{ filename }} </h1>

Вывод:

My file name is Your File name


Этот материал может помочь вам сообщить мне, что ответ правильный или неправильный .....

2 голосов
/ 28 января 2020

Ошибка говорит вам точно, что вы должны сделать:

as_view принимает только те аргументы, которые уже являются атрибутами класса

Поэтому добавьте fileName в качестве атрибута для Ваш класс:

class CodeResponseView(View):
    fileName = ''

    # rest of view code can now use the fileName attribute

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['file'] = self.fileName
        return context

Теперь любой шаблон URL, передающий fileName в as_view(), будет работать:

path('dialogs/', CodeResponseView.as_view(fileName='Dialogs.py')),
path('alerts/', CodeResponseView.as_view(fileName='Alerts.py')),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...