Оптимальный способ для шаблона django получить случайную строку из включенного файла - PullRequest
0 голосов
/ 29 января 2011

Я хочу добавить случайный слоган в свой базовый шаблон.Я понимаю, что простой способ сделать это - иметь таблицу db с моими слоганами, получить случайную и передать ее шаблону.

Вопрос в том, как мне это сделать без использования db?В мой базовый шаблон я хочу включить файл с кучей лозунгов, по одному в каждой строке, и сделать так, чтобы шаблон случайно выбрал один.Я знаю, что фильтр random выберет случайное значение из списка, так что каким-то образом мне нужно include файл слогана, но в виде списка.

Ответы [ 4 ]

0 голосов
/ 03 февраля 2012

Только что обнаружил этот фрагмент: http://djangosnippets.org/snippets/2121/ решит это.

0 голосов
/ 30 января 2011

Я бы проголосовал за тег шаблона.Храните случайную цитату в текстовом файле с каждой цитатой в отдельной строке.Затем в теге шаблона, читаемом в произвольной строке, хорошее объяснение того, как это сделать, здесь: http://www.regexprn.com/2008/11/read-random-line-in-large-file-in.html. Воспроизводится ниже:

import os,random

filename="averylargefile" file =
open(filename,'r')

#Get the total file size file_size = os.stat(filename)[6]

while 1:
  #Seek to a place in the file which is a random distance away
  #Mod by file size so that it wraps around to the beginning
  file.seek((file.tell()+random.randint(0,file_size-1))%file_size)

  #dont use the first readline since it may fall in the middle of a line
  file.readline()
  #this will return the next (complete) line from the file
  line = file.readline()

  #here is your random line in the file
  print line

Наконец, верните строку, чтобы ваш шаблонтег может распечатать его.

0 голосов
/ 30 января 2011

Если ваша база лозунгов довольно мала, вы можете использовать модуль соления. И управляйте своей базой как обычный список. http://docs.python.org/library/pickle.html

Но я думаю, что лучшее решение - сохранить базу данных лозунгов в реальном времени.

0 голосов
/ 29 января 2011

Я вижу два варианта:

1) Используйте контекстный процессор для загрузки этой случайной кавычки (т.е. из простого файла), а затем вставьте в контекст. Пример:

# create your own context-processor file (myutils/context_processors.py)
def my_random_quote_processor(request):
    context = {}

    # generate your string you want in template
    # ....
    context['RANDOM_QUOTE'] = my_random_quote

    return context


# in settings.py, tell django to include your processor
TEMPLATE_CONTEXT_PROCESSORS = (
    # ...,
    'myutils.context_processors.my_random_quote_processor'
)


# in your base template, just include the template var
<p>quote: {{ RANDOM_QUOTE }}</p>


# make sure in your views, you set the context_instance
def my_view(request):
    # ...
    return render_to_response('myapp/mytemplate.html', c, 
                              context_instance=RequestContext(request))

2) Создайте пользовательский шаблон-тег, в который вы загружаете цитату из плоского файла и т. Д .: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

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