Разорвать вложенный цикл в Django views.py с помощью функции - PullRequest
1 голос
/ 27 апреля 2010

У меня есть вложенный цикл, из которого я хотел бы выйти. После поиска на этом сайте кажется, что лучше всего поместить вложенный цикл в функцию и использовать return, чтобы выйти из него. Допустимо ли иметь в файле views.py функции, которые не являются представлениями? Какова наилучшая практика для расположения этой функции? Вот пример кода внутри моего views.py

@login_required
def save_bookmark(request):
    if request.method == 'POST':
        form = BookmarkSaveForm(request.POST)
        if form.is_valid():
            bookmark_list = Bookmark.objects.all()
            for bookmark in bookmark_list:
                for link in bookmark.link_set.all():
                    if link.url == form.cleaned_data['url']:
                        # Do something.
                        break
                    else:
                        # Do something else.
        else:
            form = BookmarkSaveForm()
        return render_to_response('save_bookmark_form.html', {'form': form})

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

Вы не должны думать о взглядах Джанго как о чем-то особенном. Это просто Python . Таким образом, вы можете иметь любые функции, которые вам нравятся, в views.py. Единственное ограничение заключается в том, что сами представления должны принимать объект запроса и возвращать подкласс HttpResponse. Кроме этого, вы можете делать то, что вам нравится в этом модуле, включая функции, классы или константы, которые используются вашими представлениями.

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

2 голосов
/ 27 апреля 2010

Да. в views.py нормально иметь функции, которые не являются представлениями (я делаю это все время). Это особенно уместно, если функция предназначена только для использования в этом модуле (т. Е. Для представлений в этом views.py) или только для одной функции представления.

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

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