我有一个简单的.txt文件,其中包含一组或URL路径,如
http://www.wood-it.be/images/advertising/flash/AbetFr.swf
http://www.wood-it.be/images/advertising/flash/AlphaBFr.swf
http://www.wood-it.be/images/advertising/flash/AranyaFr.swf
我想在views.py中编写一个函数,该函数将返回randowly其中一个要在我的模板中稍后显示的URL。
该脚本应该用在我网站的各个部分,这意味着它应该是一种通用的视图,可以在我的网站上的任何地方使用它。
我该怎么做?
答案 0 :(得分:1)
这个问题分为两部分,所以让我们分解一下。
从文件中获取随机行很容易,并且与django无关:
import random
def random_line_from_file(f):
"""Return a random line from an open file-like object"""
return random.choice(f.readlines())
with open('myfile.txt') as f:
print random_line_from_file(f)
现在,您可以在任何想要显示随机网址的地方使用该代码,例如:
def sample_view(request):
with open('myfile.txt') as f:
url = random_line_from_file(f)
return render(request, 'sometemplate.html', {'random_url': url})
我不确定您是否需要通用视图,如果您有多个不同的视图,可能更容易调用简单的python函数,并将随机URL放在模板上下文中。 YMMV
如果您不想使用此功能混淆视图代码,您还可以编写一个返回随机网址的自定义模板标记。
@register.assignment_tag
def get_random_url():
with open('myfile.txt') as f:
url = random_line_from_file(f)
return url
在您的模板中使用它:
{% get_random_url as my_url %}
<p>Look at this: {{ my_url }}.</p>
然后,您可以使用as参数后跟变量名称将结果存储在模板变量中,并在您认为合适的地方自行输出:
{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %}
有关自定义模板标记的详细信息,请参阅https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#assignment-tags。
答案 1 :(得分:0)
编写一个简单的方法并在所有需要的视图中使用它。 简单的例子:
from random import randint
def get_random_url():
with open('links.txt', 'r') as f:
links = f.split('\n')
return links[randint(0, len(links))]
您也可以将文件名移动到django设置文件。