Вызовите одну и ту же функцию из нескольких представлений - PullRequest
0 голосов
/ 22 апреля 2019

Я бы хотел иметь возможность вызывать функцию из разных представлений в django.Например, скажем, мне нужно генерировать случайное число из различных представлений, я не хочу, чтобы один и тот же код «случайного числа» повторялся в каждом представлении - я просто хочу «вызвать функцию».

Я значительно упрощаю следующий код для краткости этого вопроса:

views.py

def viewOne(request):
#code for this view, including needing to generate a random number
import random
myrandomnumber = random.randint(1,21)*5


def viewTwo(request):
#code for this view, including needing to generate a random number
import random
myrandomnumber = random.randint(1,21)*5

Как видите,Я использую один и тот же код в обоих представлениях для генерации случайного числа.Если бы я хотел обновить способ генерации случайного числа, мне пришлось бы обновить его в обоих представлениях.

Это то, что я хочу сделать:

представления.py

def createRandomNumber():
import random
myrandomnumber = random.randint(1,21)*5


def viewOne(request):
#code for this view, including needing to generate a random number
createRandomNumber()

def viewTwo(request):
#code for this view, including needing to generate a random number
createRandomNumber()

Большое спасибо за любую помощь, которую вы можете оказать мне

Ответы [ 3 ]

1 голос
/ 22 апреля 2019

Что ж, для этого вам нужно извлечь функцию, которая была бы доступна для всех представлений, которые в ней нуждаются. Например, вы можете создать файл с именем utils.py в вашем приложении django, определить функцию и импортировать его в views.py

utils.py

import random

def createRandomNumber():
    return random.randint(1,21)*5

views.py

from utils import createRandomNumber

def viewOne(request):
    createRandomNumber()

def viewTwo(request):
    createRandomNumber()
0 голосов
/ 22 апреля 2019

В зависимости от того, что вы делаете со случайным числом, эта логика может быть лучше в модели или менеджере (например, выбор случайного экземпляра). Это может означать, что вам нужно только одно место, или вы все равно хотите разделить его на отдельную функцию утилит.

0 голосов
/ 22 апреля 2019

Просто оберните код, который вы хотите использовать в функции, и вызывайте эту функцию везде, где это необходимо.

Кроме того, не используйте операторы импорта внутри функций!

#views.py
import random
def createRandomNumber():
    myRandomNumber = random.randint(1,21)*5
    return myRandomNumber


def viewOne(request):
#code for this view, including needing to generate a random number
    randomNumber = createRandomNumber()

def viewTwo(request):
#code for this view, including needing to generate a random number
    randomNumber = createRandomNumber()

Если вам нужночтобы использовать этот фрагмент кода в разных файлах, используйте оператор импорта.Итак, если вы работаете с файлом в том же каталоге, что и ваш views.py, просто добавьте

from .views import createRandomNumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...