Я Я новичок в python / GAE и мне интересно, как быстро определить и использовать переменные глобальных настроек, скажем, вы git clone моего приложения GAE и просто открываете config.yaml
, добавляете изменения настроек, и приложение все подключено, вот так:
# config.yaml (or whatever)
settings:
name: "Lance"
domain: "http://example.com"
# main.py
class Main(webapp.RequestHandler):
def get(self):
logging.info(settings.name) #=> "Lance"
Что? ) Теперь у приложений Ella есть ...
Учтите, что я включаю повторно используемое приложение с пространством имен:
urlpatterns = patterns('',
# ella urls
url('^ella/', include('ella.core.urls', namespace="ella")),
)
Теперь у приложений Ella есть такие URL:
urlpatterns = patterns( '',
url( r'^(?P<category>[a-z0-9-/]+)/$', category_detail, name="category_detail" ),
# object detail
url( r'^(?P<category>[a-z0-9-/]+)/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<content_type>[a-z0-9-]+)/(?P<slug>[a-z0-9-]+)/$',
object_detail, name="object_detail" )
)
Теперь вызывается {% url ella: category_detail category = "cat"%}
работает нормально. Однако, когда объект пытается сгенерировать ссылку на свою информацию, он вызывает
from django.core.urlresolvers import reverse
url = reverse('object_detail', kwargs={'required' : 'params'})
. Это не работает, если не переписать как
from django.core.urlresolvers import reverse
url = reverse('ella:object_detail', kwargs={'required' : 'params'})
. Поэтому, если я правильно понимаю, , включая повторно используемое приложение в пространство имен, нарушает все внутреннее обратное () s внутри данного приложения .
Это правда? Что я пропустил? Есть ли способ обойти?
Поскольку у вас есть конфигурация URL-адресов с интервалами имен, вам необходимо указать шаблон namespace:view-name, чтобы правильно его изменить (особенно из представления).
Но если вы хотите избежать этого, вы также можете передать namespace/appname в качестве параметра current_app. Есть несколько способов указать current_app, когда вы находитесь в шаблоне. Но если вы находитесь в поле зрения, вам нужно жестко закодировать, как вы это сделали, или передать параметр current_app
url = reverse('object_detail',
kwargs={'foo':'bar'},
current_app=app_name_or_name_space)
см.: http://docs.djangoproject.com/en/dev/topics/http/urls/ #reverse