如何在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.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 应用程序的 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
请我需要一些关于如何以最佳方式处理它的指导
提前致谢!
我有这个 Django 网址:
url( r'^(?P<language>.*)/(?P<shop>.*)/(?P<brand>.*)/$', 'app.views.view_1' ),
Run Code Online (Sandbox Code Playgroud)
现在,“语言”、“商店”、“品牌”都是我 url 中的参数,我想将它们读入我的自定义 Django 上下文处理器。我该怎么做?
谢谢。
抛开任何关于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风格的路由模式?
目前,我想要升级到Django 1.10.3从Django 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内化/翻译.或者,如果不可能,那将是一个很好的选择?
提前致谢.
我试图设置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 还很陌生,所以如果这似乎是一个太简单的问题,请原谅我。
我一直在尝试在 CreateView 中使用它,但它不起作用:
re_path(r'^<str:pk>/$', indexView.as_view(), name='index'),
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么,以及如何解决这个问题?
我正在处理一个 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
我觉得这应该很简单,但我所做的并没有得到回报。
在 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 ×10
django-urls ×10
python ×6
django-1.10 ×1
django-views ×1
flask ×1
parameters ×1
primary-key ×1
python-2.7 ×1
regex ×1
request ×1
session ×1