Как вы определяете конфигурационные переменные / константы в Google App Engine (Python)?

Я Я новичок в 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 внутри данного приложения .

Это правда? Что я пропустил? Есть ли способ обойти?

24
задан Martijn Pieters 22 April 2014 в 16:33
поделиться

1 ответ

Поскольку у вас есть конфигурация 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

6
ответ дан 29 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: