代码之家  ›  专栏  ›  技术社区  ›  Tomas Andrle

从Django admin中编辑.htaccess

  •  1
  • Tomas Andrle  · 技术社区  · 17 年前

    我在.htaccess文件中阻止某些引用,以避免向warez站点提供图像。这些图像是直接提供的,因此Django不会触碰它们,因为性能原因,我希望保持这种方式。

    但是我希望能够使用Django admin将更多被阻止的站点添加到.htaccess文件中的列表中,而不必使用FTP或SVN访问该站点。这可能吗?怎样

    5 回复  |  直到 17 年前
        1
  •  3
  •   rob    16 年前

    您可以创建一个模型来定义.htaccess的所有可配置部分;然后,添加一个信号( django doc
    类似这样的代码(通常,这是未经测试的代码!):

    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)
    
        2
  •  2
  •   Graham Dumpleton    17 年前

    您可能会发现使用一些mod_rewrite voodoo和使用RewriteMap来保存要使用重写条件阻止的站点列表以检查地图更容易。这样做的好处是,地图文件中唯一的内容就是站点列表,因此更新更容易。映射文件在更新后也将由Apache自动重新加载。不过,您可能需要在Apache主配置中为其设置重写规则。

        3
  •  1
  •   RichieHindle    17 年前

    def add_to_htaccess(line):
        htaccess = open("/path/to/.htaccess", "a")
        htaccess.write(line+"\n")
        htaccess.close()
    
        4
  •  0
  •   SingleNegationElimination    17 年前

    您可能很难从管理应用程序中执行此操作,但您可能需要自己制作一个应用程序,用十几行代码,再加上一些模板代码来完成此操作。

        5
  •  -1
  •   Andy Baker    17 年前

    编写自定义应用程序,但重复使用管理模板:

    {% 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>&nbsp;&rsaquo;&nbsp;{{page_title}}</div>{% endblock %}
    {% block content %}
    ....Your code here....
    {% endblock %}
    

    将它添加到您的URL中,在管理URL之前,并且出于所有目的,它是管理的一部分。如果愿意,您可以自定义管理模板,在对象工具或主菜单中包含指向它的链接。