标签: django-urls

如何在Django中根据域名或TLD设置urlpatter?

如何在Django中根据域名或TLD设置urlpatter?

对于某些链接,亚马逊根据其网站tld以母语显示网址.

http://www.amazon.de/bücher-buch-literatur/(de:books =>bücher)

http://www.amazon.fr/Nouveautés-paraître-Livres/(fr:books => Livres)

http://www.amazon.co.jp/和书 - ユーズドブッ - 英语学习/ (jp:books =>和书)

(链接不完整,只显示为样本.)

是否可以在urls.py中获取主机名?(请求对象在urls.py中不可用)或者可能在process_request中间件中并在urls.py中使用它(如何???)

任何替代建议如何实现这一点?

#---------- pseudocode ---------- 

website_tld = get_host(request).split(".")[-1]

#.fr French  : Books : Livres
#.de German : Books : Bücher

if website_tld == "fr":
    lang_word = "Livres"
elif website_tld == "de":
    lang_word = "Bücher"
else:
    lang_word = "books"

urlpatterns = patterns('',
                       url(r'^%s/$' % lang_word,books_view, name="books"),
                       )
Run Code Online (Sandbox Code Playgroud)

url模式需要基于tld构建,然后在模板中构建,<a href="{% url books %}" >{% trans "books" %}</a>以将html呈现为<a href="Bücher">Bücher</a><a href="Livres">Livres</a>

django session request django-urls

6
推荐指数
2
解决办法
4340
查看次数

如何制作一个简单的 Django URLconf 和 reverse() 以进行测试?(获取 TypeError: unhashable type: 'list')

我正在编写调用django.core.urlresolvers.reverse()生成链接的便捷代码。但是,我似乎无法编写一个简单的URLconf来进行快速测试。

这是我尝试过的:

>>> from django.conf.urls import patterns, url
>>> conf = patterns('', url(r'^foo/$', lambda request: None, name='foo'))
>>> from django.core.urlresolvers import reverse
>>> reverse('foo', conf)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File ".../env/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 445, in reverse
    resolver = get_resolver(urlconf)
File ".../env/local/lib/python2.7/site-packages/django/utils/functional.py", line 27, in wrapper
    if mem_args in cache:
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

我在 Python 2.7 上使用 Django 1.5。

django integration-testing django-urls python-2.7

6
推荐指数
1
解决办法
2127
查看次数

Django 加密 url 中的主键

我环顾四周,但仍然对如何安全地加密 django 应用程序的 url 中的主 ID 感到不舒服。

我的网址如下:

http://www.example.com/primary1_id/primary2_id/testing/
Run Code Online (Sandbox Code Playgroud)

例如:

http://www.example.com/3/7/testing/
Run Code Online (Sandbox Code Playgroud)

我想向用户显示上述网址,如下所示:

http://www.example.com/623477897ghfjs23879/7829yfgweh/testing/ #encrypted key instead of primary id
Run Code Online (Sandbox Code Playgroud)

在我看来,我应该能够从加密密钥中解码回primary1_id和primary2_id

请我需要一些关于如何以最佳方式处理它的指导

提前致谢!

python django primary-key django-urls

6
推荐指数
1
解决办法
7707
查看次数

django url 参数到 context_processor

我有这个 Django 网址:

url( r'^(?P<language>.*)/(?P<shop>.*)/(?P<brand>.*)/$', 'app.views.view_1' ),
Run Code Online (Sandbox Code Playgroud)

现在,“语言”、“商店”、“品牌”都是我 url 中的参数,我想将它们读入我的自定义 Django 上下文处理器。我该怎么做?

谢谢。

django django-urls django-context

6
推荐指数
2
解决办法
557
查看次数

在Django中,有没有办法使用Flask风格的路由语法定义路由?

抛开任何关于Django vs Flask的强烈感受,我有一大堆 Flask风格的路线,我想转换成Django.它们看起来像您通常的Flask路线:

'/foo/<spam>/<int:eggs>/'
Run Code Online (Sandbox Code Playgroud)

使用Flask中的转换器会变得更加复杂path:

'/foo/<path:location>'
Run Code Online (Sandbox Code Playgroud)

所以我拥有所有这些路线,而且我不想在转换我的视图时找出接近它们的正则表达式.我想在Django中解析Flask风格的路线.有没有办法在Django中使用Flask风格的路由模式?

python django django-urls flask

6
推荐指数
1
解决办法
569
查看次数

不要国际化/翻译URL

问题

目前,我想要升级到Django 1.10.3Django 1.9.8.目前我的测试失败了,因为由于某种原因,Django试图翻译/国际化我的URL reverse().

在谈到国际化时我没有改变任何东西,并且非常希望关闭这个"功能".它不仅没有通过大量的测试,而且还有一些项目必须静态地引用这个网站的URL.这意味着不允许更改此网站上的URL(或者我必须为Django提供的每个翻译编辑它们,这将是一个真正的痛苦).


错误

我在测试中遇到的实际错误如下:

Traceback (most recent call last):
  File "/tests/unit/views/test_index.py", line 14, in setUp
    self.url = reverse('indexpage')
  File "/local/lib/python2.7/site-packages/django/urls/base.py", line 91, in reverse
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
  File "/local/lib/python2.7/site-packages/django/urls/resolvers.py", line 346, in _reverse_with_prefix
    possibilities = self.reverse_dict.getlist(lookup_view)
  File "/local/lib/python2.7/site-packages/django/urls/resolvers.py", line 243, in reverse_dict
    return self._reverse_dict[language_code]
KeyError: 'nl-nl'
Run Code Online (Sandbox Code Playgroud)

很明显,Django正在尝试使用此项目设置中提供的语言代码.


我试过了什么

我试过将USE_I18N设置设置为False.我也试过这个USE_L10N.我也尝试删除LANGUAGE_CODE我的设置中指定的,但随后抛出的错误是指en-us语言代码而不是nl-nl语言代码.我也尝试安装LocaleMiddleware,看看我是否至少可以让错误停止显示,但不幸的是,这也没有用.


如何在Django中关闭URL内化/翻译.或者,如果不可能,那将是一个很好的选择?

提前致谢.

python django django-urls django-1.10

6
推荐指数
1
解决办法
1726
查看次数

Django名称模式未在ulrs.py中定义

我试图设置Django应用,但是每次尝试运行它时,都会收到以下错误消息:NameError:未定义名称“ patterns”

我不明白urls.py文件出了什么问题,这是它的副本:

from django.contrib import admin
from rest_framework import routers
from SecMeRe import views

router = routers.DefaultRouter()
#makes sure that the API endpoints work
router.register(r'api/SecMeRe', views.PatientViewSet)
admin.autodiscover()

urlpatterns = patterns(
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
)
Run Code Online (Sandbox Code Playgroud)

python django django-urls

6
推荐指数
1
解决办法
9790
查看次数

Django 2.0 re_path 中的正则表达式

我对 python 和 Django 还很陌生,所以如果这似乎是一个太简单的问题,请原谅我。

我一直在尝试在 CreateView 中使用它,但它不起作用:

re_path(r'^<str:pk>/$', indexView.as_view(), name='index'),
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么,以及如何解决这个问题?

python regex django django-urls django-views

6
推荐指数
1
解决办法
8147
查看次数

在 Django Urls 中传递一个 URL 作为参数

我正在处理一个 Django(2) 项目,在该项目中我需要在 Django URL 中传递一个 URL 作为参数,这是我尝试过的:

网址.py:

urlpatterns = [
path('admin/', admin.site.urls),
url(r'^api/(?P<address>.*)/$', PerformImgSegmentation.as_view()),
]
Run Code Online (Sandbox Code Playgroud)

视图.py:

class PerformImgSegmentation(generics.ListAPIView):
    def get(self, request, *args, **kwargs):
        img_url = self.kwargs.get('address')
        print(img_url)
        print('get request')
    return 'Done'
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我address通过邮递员传递了一个名称为名称的参数,但它失败了。它返回此错误:

未找到:/api/ [05/Sep/2018 15:28:06] "GET /api/ HTTP/1.1" 404 2085

python django django-urls

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

在 Django REST Framework 中使用 url 传递查询

我觉得这应该很简单,但我所做的并没有得到回报。

在 Django 中,我的应用程序中有这个 urls.py:

from django.urls import path

from .views import PostcodessAPIListView, PostcodesAPIID, PostcodesWithinRadius

urlpatterns = [
    path("<str:postcode>/<int:radius_km>", PostcodesWithinRadius.as_view(), name="results_api_radius"),
    path("", PostcodessAPIListView.as_view(), name="results_api_list"),
    path("<int:pk>", PostcodesAPIID.as_view(), name="results_api_detail"),
]
Run Code Online (Sandbox Code Playgroud)

我有这个观点,应该取一个邮政编码和一个以公里为单位的半径,调用外部api将邮政编码转换为经度和纬度,然后再次调用外部api以获取一定半径内的邮政编码。

class PostcodesWithinRadius(generics.RetrieveAPIView):
    serializer_class = PostcodeSerializer

    def get_queryset(self):
        postcode = self.request.query_params.get('postcode', None)
        radius_km = self.request.query_params.get('radius_km', None)
        print(postcode, radius_km)
        postcodes = self.get_postcodes_within_radius(postcode, radius_km)
        print(postcodes)
        return Postcode.objects.filter(postcode__in=postcodes)

    def get_postcodes_within_radius(self, postcode, radius_km):

        radius_km = 3
        postcodes_within_radius = []

        if radius_km <= 20:
            radius = radius_km * 1000
        else:
            raise ValueError('Radius cannot be over 20km.')

        GET_LAT_LON_URL …
Run Code Online (Sandbox Code Playgroud)

django parameters django-urls django-rest-framework

6
推荐指数
2
解决办法
4975
查看次数