2013-01-15 54 views
1

執行管理命令我有以下管理命令(website.py)經由URL

from __future__ import absolute_import 
from django.core.management.base import BaseCommand 


class Command(BaseCommand): 

    def run_from_argv(self, argv): 
     self._argv = argv 
     self.execute() 

    def handle(self, *args, **options): 
     from scrapy.cmdline import execute 
     execute(self._argv[1:]) 

我想通過URL來執行此命令:/爬行/更新現在/ 的看法是:

from django.core import management 

def update_index(request): 
    management.call_command('website', 'crawl spider') 

但它不工作:

Command' object has no attribute '_argv' 
+0

你知道嗎?你最終在這裏做了什麼? –

回答

1

我認爲問題是,run_from_argv爲int ernal Django方法,並由django.core.management.ManagementUtility調用。而且你不應該自己實現它,self._argv不是設置在任何地方。參數已經在handle()中可用。

而你的方法有一些缺點。

首先,由於Django的同步特性,如果您的網址是「重」,它可以採取大量的時間來得到它和解析。相反,我強烈建議你看看Celery。從視圖執行任務是更「正確」的方式,並且沒有性能問題。