Джанго принимает параметры GET - PullRequest
3 голосов
/ 23 мая 2010

Ошибка можно увидеть здесь: http://djaffry.selfip.com:8080/

Я хочу, чтобы страница индекса принимала параметры, будь то

mysite.com/search/param_here

или

mysite.com/?search=param_here

Iесть это в моих шаблонах URL, но я не могу заставить это работать.Есть предложения?

urlpatterns = patterns('',
        (r'^$/(?P<tag>\w+)', 'twingle.search.views.index'),
    )

1 Ответ

23 голосов
/ 23 мая 2010

Прежде всего, ваше регулярное выражение в шаблоне URL неверно.

r'^$/(?P<tag>\w+)'

Это говорит, чтобы соответствовать всему от

  • ^ начало строки
  • $ до конца строки
  • имеет шаблон именованного тега, который состоит из слов и цифр после конца строки

Обычно после окончания одной строки следует другая строка или EOF, не содержащий содержимого (если только вы не используете многострочное регулярное выражение и вам здесь это не нужно).

Конец строки должен быть после тега:

r'^/(?P<tag>\w+)$'

Использование строки запроса

Строки запроса не анализируются при восстановлении URL.

Таким образом, если у вас есть URL в формате:

http://mysite.com/?query=param_here

будет соответствовать:

(r'^$', 'twingle.search.views.index')

В этом случае вы можете получить доступ к query строке в таком виде:

request.GET.get('query', '')

без строки запроса

mysite.com/search/param_here 

будет соответствовать:

(r'^search/(?P<query>\w+)$', 'twingle.search.views.index'),

Где все, что соответствует \w (вы должны изменить это в соответствии с вашими потребностями), будет передано вместе с запросом функции просмотра индекса в качестве аргумента с именем query.

И

Вы можете использовать оба шаблона URL следующим образом:

urlpatterns = patterns('twingle.search.views',
   url(r'^$', 'index'),
   url(r'^search/(?P<query>\w+)$', 'index'),
)

В этом примере представление будет выглядеть примерно так:

def index(request, query=None)
    if not query:
       query = request.GET.get('query', '')
    # do stuff with `query` string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...