2010-09-07 1 views

ответ

1

ИМХО Ссылка не должна содержать параметр запроса. Это не совсем правильно.

Это очень крутой и не-Django способ вернуть URL-адрес, подобный тому, который вы указали из метода модели get_absolute_url().

Шаги

Сначала добавьте фиктивный URL и соответствующий вид ничегонеделания. Напр.

# models.py 
class MyModel(models.Model): 
    ... 
    @models.permalink 
    def get_absolute_url(self): 
     return ('dummy_url', [str(self.id), self.filter]) 

# urls.py 
url(r'^news/(?P<model_id>\d+)/\?category=(?P<category>\w+)$', 
    'dummy_url', {}, name = 'dummy_url'), 

# views.py 
def dummy_url(request, *args, **kwargs): 
    pass 

Этот манекен будет служить только для генерации URL-адрес. То есть вы получите правильный URL-адрес, если вы выполните instance.get_absolute_url().

Вы должны добавить другой, правильная конфигурация URL и вид согласования на самом деле отображения страницы экземпляра, когда URL называется. Что-то вроде этого.

# urls.py 
url(r'^news/(?P<model_id>\d+)/$', 
    'correct_view', {}, name = 'correct_view'), 

# views.py 
def correct_view(request, *args, **kwargs): 
    # do the required stuff. 

correct_view придется извлечь параметр GET из request хотя.

Обратите внимание на то, насколько похожи фиктивные и правильные конфигурации URL-адресов. Только параметр запроса является дополнительным в манекене.

+0

hm, ничего себе. нормально, поэтому, если я не использую параметр get param, то как я могу передать текст, который может включать в себя такие вещи, как пробел или, и т. д.? – killerbarney

+0

См. Этот вопрос. Речь идет о передаче текста с пробелами в URL. http://stackoverflow.com/q/3675368/140185 Кроме того, вы не можете передавать id или slug вместо поля с пробелами/запятыми? –

+0

Я пытаюсь передать имя человека. Поскольку это может быть ссылка в местах, POST не кажется правильным. Может работать слизняк, но правильно ли иметь апостроф в URL-адресе? Это не выглядит правильным. – killerbarney