Как Вы используете пространства имен URL Django?

Я пытаюсь приобрести навык пространств имен URL Django. Но я не могу найти примеры или документацию.

Вот то, что я попробовал.

urls.py:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^foo/', include('sub_urls', namespace='foo', app_name='foo')),
    (r'^bar/', include('sub_urls', namespace='bar', app_name='bar')),            
)

sub_urls.py:

from django.conf.urls.defaults import patterns, url
from views import view1

urlpatterns = patterns('views',
    url(r'^(?P\d+)/$', view1, name='view1')
)

views.py:

from django.shortcuts import render_to_response

def view1(request, view_id):
    return render_to_response('view1.html', locals())

В view1.html, {% url foo:view1 3%} выводы/foo/3, и {% url bar:view1 3%} выводы/bar/3. Это сохраняется, просматриваю ли я к/foo/X или/bar/X.

То, что я хочу, должно быть в состоянии просмотреть к/foo/X или/bar/X, и иметь {% url view1 3%} вывод или/foo/3 или/bar/3, соответственно.

29
задан Chase Seibert 17 December 2009 в 03:46
поделиться

3 ответа

Я думаю, что это невозможно в Джангу прямо сейчас. Посмотрите на это Сообщение Сообщение Post Какие ссылки Билет 11559 . Я думаю, что вы пытаетесь сделать то же самое - эффективно пропустить неявный параметр в тег URL.

Также, предполагая, что sub_urls из того же приложения оба раза, вы должны убедиться App_name , одинаково в обоих случаях. Вам нужно только менять пространство имен.

3
ответ дан 28 November 2019 в 02:10
поделиться

Вот одно решение, которое я придумал.

views.py:

from django.shortcuts import render_to_response
from django.template import RequestContext

def render_response_context(view, locals):
    request = locals["request"]
    app = "bar" if request.META["PATH_INFO"].lower().startswith("/bar") else "foo"
    return render_to_response(view, locals, 
        context_instance=RequestContext(request, current_app=app))

def view1(request, view_id):    
    return render_response_context('view1.html', locals())

view1.html:

{% load extras %}
{% namespace_url view1 3 %}

extras.py:

from django import template
from django.core.urlresolvers import reverse

register = template.Library()

@register.tag
def namespace_url(parser, token):
    tag_name, view_string, arg1 = token.split_contents()
    return NamespaceUrlNode(view_string, arg1)

class NamespaceUrlNode(template.Node):
    def __init__(self, view_string, arg1):
        self.view_string = view_string
        self.arg1 = arg1
    def render(self, context):
        return reverse("%s:%s" % (context.current_app, self.view_string), args=[self.arg1])

В основном я всегда проходил контекст current_app как «foo» или «bar», который я вычисляю вручную, просматривая URL-адрес запроса. Затем я использую настраиваемый тег, который разрешает URL-адрес на основе current_app.

Он не очень общий; "foo" и "bar" жестко запрограммированы, и тег может принимать только один аргумент. Даже если эти проблемы исправлены, это похоже на взлом.

0
ответ дан 28 November 2019 в 02:10
поделиться

Ключевое слово Java final эквивалентно ключевым словам C # sealed , readonly и sealed .

Два из этих трех несколько отличаются в Java и C #:

В Java методы являются виртуальными по умолчанию, поэтому любой метод может быть объявлен окончательным , чтобы предотвратить его переопределение. В C # методы не являются виртуальными по умолчанию, поэтому единственные переопределенные методы могут быть объявлены запечатанными (Чтобы предотвратить их дальнейшее переопределение)

В Java любая переменная или поле могут быть объявлены окончательными , чтобы предотвратить их изменение после инициализации (И, для полей, вне конструктора). В C # поля могут быть объявлены только для чтения для того же эффекта, но локальные переменные не могут. Обратите внимание, что Java не имеет эквивалента ключевого слова C # const . ( const в C # оцениваются во время компиляции, и значения жестко кодируются вместо ссылки)

Для классов запечатанные классы C # и конечные классы Java являются абсолютно одинаковыми (AFAIK).

-121--2666506-

Всегда сложно отлаживать проблемы аутентификации удаленно, но вы можете решить проблему, включив олицетворение в AppPool. Таким образом, при входе пользователя в систему IIS сможет подключаться к SQL Server в качестве пользователя.

Другой подход может заключаться в использовании проверки подлинности SQL; к сожалению, детали зависят от того, как у вас сложились отношения.

-121--4998524-

Я понимаю, что решение, приведенное ниже, нарушает принцип DRY, так как вы должны создать по существу дублирующиеся файлы конфигурации URL для foo и bar, однако я думаю, что это должно работать.

urls.py:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^foo/', include('sub_urls_foo')),
    (r'^bar/', include('sub_urls_bar')),            
)

sub _ urls _ foo.py:

from django.conf.urls.defaults import patterns, url
from views import view1

urlpatterns = patterns('views',
    url(r'^(?P<view_id>\d+)/$', view1, 'view1_foo', {'namespace': 'view1_foo'})
)

sub _ urls _ bar.py:

from django.conf.urls.defaults import patterns, url
from views import view1

urlpatterns = patterns('views',
    url(r'^(?P<view_id>\d+)/$', view1, 'view1_bar', {'namespace': 'view1_bar'})
)

views.py:

from django.shortcuts import render_to_response

def view1(request, view_id, namespace):
    return render_to_response('view1.html', locals())

Затем для шаблона используйте следующее:

{% url namespace 3 %}

Я не проверял идею использования переменной в разделе имени тега {% url%}, но думаю, что она должна работать.

0
ответ дан 28 November 2019 в 02:10
поделиться
Другие вопросы по тегам:

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