标签: django-urls

根据模型属性获取django对象id

我有一个名为"Places"的基本模型,它具有以下视图:

def view_index(request, place_name):
Run Code Online (Sandbox Code Playgroud)

用户将使用以下URL访问该视图:

http://server.com/kansas
Run Code Online (Sandbox Code Playgroud)

"堪萨斯"是存储在模型"位置"内名为"名称"的字段中的值.

问题是我无法弄清楚如何根据对象名称获取对象id.有没有办法做到这一点?

django django-models django-urls django-views

23
推荐指数
3
解决办法
5万
查看次数

如何在可重用的应用程序中使用带有django的命名空间URL

我有一个django应用程序,一个论坛应用程序,它有模板.在这些模板中,有一些网址指向应用程序的某些部分.例如,thread_list模板具有到每个线程的链接,如下所示:

{% for thread in threads %}
    <a href="{% url forum_thread thread %}">{{thread.title}}</a>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

问题是,我真的不喜欢称我的网址为"forum_thread".我更喜欢"线程"并使用django的命名空间功能."forum_thread"可以在项目的其他地方使用(名称空间冲突).所以它看起来像这样:

{% for thread in threads %}
    <a href="{% url forum:thread thread %}">{{thread.title}}</a>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但这不是正确的方法.这里的文档有点不清楚.

我希望这个应用程序可重用且易于配置.但我也想使用最好的标准.我不想让用户指定自己的命名空间名称,然后让他们编辑每个模板中的每个网址.

我应该如何在这个应用程序中做网址?

django django-urls

22
推荐指数
1
解决办法
1万
查看次数

django url模式为%20

在Django中,我需要使用什么url模式来处理urlencode字符,例如%20

我正在使用,(?P<name>[\w]+)但这只处理字母数字字符,因此%导致错误

django django-urls

22
推荐指数
2
解决办法
1万
查看次数

Django:request.GET和KeyError

码:

# it's an ajax request, so parameters are passed via GET method
def my_view(request):
    my_param = request.GET['param'] // should I check for KeyError exception?
Run Code Online (Sandbox Code Playgroud)

在PHP框架中,我通常必须检查存在的参数,如果不存在,则将用户重定向到某个地方.但在Django中,未出现的参数会导致500错误页面并且似乎需要行为.那么按原样保留代码还是有更好的实践可以吗?我应该总是使用像/ myaction/paramvalue /而不是/ myaction传递的标准参数吗?param_name = param_value(为ajax请求构建这样的URL有点困难)?

python django django-urls

22
推荐指数
2
解决办法
2万
查看次数

包含的urlconf manager.urls中没有任何模式

解决方案:找到以下似乎工作正常的django代码段(http://djangosnippets.org/snippets/2445/)

from django.utils.functional import lazy
from django.core.urlresolvers import reverse

#Workaround for using reverse with success_url in class based generic views
#because direct usage of it throws an exception.

reverse_lazy = lambda name=None, *args : lazy(reverse, str)(name, args=args)
Run Code Online (Sandbox Code Playgroud)

显然,django trunk 现在有一个reverse_lazy函数.


更新:此错误与我在通用视图中进行反向调用有关:

class AddObjView(CreateView):
    form_class = ObjForm
    template_name = 'manager/obj_add.html'
    success_url = reverse('manager-personal_objs')
Run Code Online (Sandbox Code Playgroud)

这不是有效的吗?

如果我而不是泛型写这样的东西,它的工作原理:

def add_obj(request, pk):
    a=reverse('manager-personal-objs')
    return HttpResponse(a)
Run Code Online (Sandbox Code Playgroud)

我有一个包含2个应用程序的项目.每个应用程序都有其网址和视图.它们都工作正常,但在管理器应用程序上,只要我在视图中引用反向函数(任何视图),我就会收到以下错误:异常类型:ImproperlyConfigured异常值:包含的urlconf manager.urls没有其中的任何模式

网址文件:

urlpatterns = patterns('',
    url(r'^$', ObjView.as_view(), name='manager-obj'),
    url(r'^add/$', AddObjView.as_view(), name='manager-add_obj'),
    url(r'^personal/$', PersonalObjsView.as_view(), …
Run Code Online (Sandbox Code Playgroud)

django django-urls

22
推荐指数
1
解决办法
8612
查看次数

如何将链接/ url放入Django的网站主页?

在Django模板,有没有在上下文中的变量(例如{{ BASE\_URL }},{{ ROOT\_URL }}或者{{ MEDIA\_URL }}是一个可以用它来链接到home一个项目的网址是什么?

即如果Django在项目的根目录中运行,那么{{ R }}模板中的变量(让我们称之为R)就是/.如果根URL是子文件夹,http://host/X/则变量{{ R }}将是/X/(或http://host/X/).

这看起来很简单,但我找不到答案.:) 谢谢!

python django django-urls

21
推荐指数
3
解决办法
4万
查看次数

Django - 如何将多个参数传递给url模板标记

在我的urls.py中,我有:

(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/section/(?P<slug>[-\w]+)/$', 
    'paper.views.issue_section_detail', 
    {}, 
    'paper_issue_section_detail'
),
Run Code Online (Sandbox Code Playgroud)

而我正在尝试在模板中执行此操作:

{% url paper_issue_section_detail issue.pub_date.year,issue.pub_date.month,issue.pub_date.day,section_li.slug %}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

TemplateSyntaxError
Caught an exception while rendering: Reverse for 'paper_issue_section_detail' with arguments '(2010, 1, 22, u'business')' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)

但是,如果我将URL模式更改为只需要一个参数,它就可以正常工作.即:

(r'^(?P<year>\d{4})/$', 
    'paper.views.issue_section_detail', 
    {}, 
    'paper_issue_section_detail'
),
Run Code Online (Sandbox Code Playgroud)

和:

{% url paper_issue_section_detail issue.pub_date.year %}
Run Code Online (Sandbox Code Playgroud)

所以当我使用'url'模板标签传递多个参数时似乎抱怨 - 我用两个参数得到了相同的错误.是否有不同的方式来传递几个参数?我尝试传入命名关键字参数,并生成类似的错误.

对于它的价值,相关视图如下所示:

def issue_section_detail(request, year, month, day, slug):
Run Code Online (Sandbox Code Playgroud)

如何将多个参数传递给url模板标记?

django django-templates django-urls

21
推荐指数
3
解决办法
3万
查看次数

如何在Django urls.py中将url参数传递给reverse_lazy

考虑到我有1个资源和2个网址(让我们说新的和旧的)连接到该资源.所以,我想为其中一个网址设置HTTP重定向.

myapp/urls.py我有:

urlpatterns = patterns('',
    url(r'^(?P<param>\d+)/resource$', 
                      'myapp.views.resource', 
                       name='resource-view'
    ),
)
Run Code Online (Sandbox Code Playgroud)

mycoolapp/urls.py我想指定:

from django.views.generic.simple import redirect_to
from django.core.urlresolvers import reverse_lazy

urlpatterns = patterns('',
    url(r'^coolresource/(?P<param>\d+)/$', 
                       redirect_to, 
                       {
                          'url': reverse_lazy('resourse-view', 
                                         kwargs={'param': <???>}, 
                                         current_app='myapp'
                                 ),
                       }
   ),
)
Run Code Online (Sandbox Code Playgroud)

问题是如何传递<param>reverse_lazykwargs(那么,<???>在上面的例子中放置什么)?

django django-urls

21
推荐指数
4
解决办法
3万
查看次数

Django:如何在我的项目urlconf中覆盖app提供的url?

假设我有一个包含三个应用程序的Django项目:foo,bar和glue.我正在尝试遵循可重用的应用程序约定,因此foo和bar不依赖于(并且不知道任何关于)彼此或胶水.Glue包含将其他两个应用程序集成到站点中的代码.

Foo提供了一个模板标签,我希望将其包含在bar提供的其中一个页面中.条形图页面的视图可以传递给备用模板.我在胶水中制作了一个扩展条形模板的模板,并包含了foo的模板标签.为了将我的新模板传递到bar的视图,我需要修改指向它的urlconf条目.

我的项目urlconf看起来像这样:

urlpatterns = patterns('',
  (r'^$', include('glue.urls')),
  (r'^foo/', include('foo.urls')),
  (r'^bar/', include('bar.urls')),
)
Run Code Online (Sandbox Code Playgroud)

将备用模板(或任何其他任意视图参数)传递给条形视图的最优雅方法是什么?我不想直接修改bar的urlconf,因为这会使它依赖于胶水.

我能想到的唯一另一种方法是删除include('bar.urls'),将bar的urlconf中的url模式复制到项目urlconf中,并修改我感兴趣的模式.但这种方法违反了DRY原则.还有其他一些我缺少的解决方案吗?

django code-reuse django-urls

20
推荐指数
1
解决办法
8171
查看次数

Django 1.9中的新url格式

我最近将我的Django项目升级到1.9版.

当我尝试运行时migrate,我收到以下两个错误:

  1. Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got app.views.about). Pass the callable instead.
  2. django.conf.urls.patterns() is deprecated and will be removed in Django 1.10. Update your urlpatterns to be a list of django.conf.urls.url() instances instead.

有人可以告诉我如何做到这一点的正确语法?我的简短示例urls.py如下:

urlpatterns = patterns('',
    url(r'^about/$', 'app.views.about',
        name='about'),
)

urlpatterns += patterns('accounts.views',
    url(r'^signin/$', 'auth_login',
        name='login'),
)
Run Code Online (Sandbox Code Playgroud)

谢谢!

django django-urls django-1.9

20
推荐指数
1
解决办法
1万
查看次数