我阻止了.htacccess文件中的某些引用来避免将图像提供给warez网站。这些图像是直接提供的,因此Django不会触摸它们,因为性能,我希望保持这种状态。
但我希望能够使用Django管理员在.htaccess文件中的列表中添加更多被阻止的站点,而无需使用FTP或SVN访问该站点。这可能吗?怎么样?
答案 0 :(得分:3)
您可以创建一个定义.htaccess的所有可配置部分的模型;然后,在每次保存时添加一个信号(django doc),以调用一个函数,该函数将根据数据库中定义的内容编写新的.htaccess。
像这样的东西(像往常一样,这是未经测试的代码!):
class HtAccessExclusion(models.Model):
exclusion = models.CharField(max_length=300)
from django.db.models.signals import post_save
def export_on_htaccess(sender, **kwargs):
# write "standard" part of htaccess
# use the content of HtAccessExclusion table to write all specific exclusions
...
post_save.connect(export_on_htaccess, sender=HtAccessExclusion)
答案 1 :(得分:2)
您可能会发现使用某些mod_rewrite voodoo更容易,并使用RewriteMap来保存要阻止的网站列表,并使用重写条件来检查地图。这样做的好处是,映射文件中唯一的东西就是站点列表,因此更新它更容易。 Apache更新后,地图文件也将由Apache自动重新加载。您可能需要在主Apache配置中放置重写规则。
答案 2 :(得分:1)
我不知道我在这里是否遗漏了什么,但是不是这样吗?
def add_to_htaccess(line):
htaccess = open("/path/to/.htaccess", "a")
htaccess.write(line+"\n")
htaccess.close()
答案 3 :(得分:0)
您可能很难从管理员应用程序执行此操作,但您可以自己创建一个应用程序,在大约十几行代码中执行此操作,再为模板添加一些代码。
答案 4 :(得分:-1)
编写自定义应用,但重复使用管理模板:
{% extends "admin/base_site.html" %}
{% load adminmedia %}
{% block coltype %}flex{% endblock %}
{% block bodyclass %}change-list{% endblock %}
{% block breadcrumbs %}<div class="breadcrumbs"><a href="/admin/">Home</a> › {{page_title}}</div>{% endblock %}
{% block content %}
....Your code here....
{% endblock %}
在管理网址之前将其添加到您的网址,并将其添加到管理员的所有意图和目的中。您可以自定义管理模板,以便在对象工具或主菜单中包含指向它的链接。