我想在Django URL模式中使用带小数点的数字,但我不确定它是否真的可行(我不是正则表达式专家).
这是我想要用于URL的内容:
/item/value/0.01
/item/value/0.05
Run Code Online (Sandbox Code Playgroud)
这些网址会显示价值0.01美元或0.05美元的商品.当然,我可以采取简单的方法,并以美分传递值,因此它将是/ item/value/1,但我希望在我的视图中接收作为十进制数据类型而不是整数的参数(和我可能不得不在某个时候处理一小部分分数).是否可以在Django URL模式中编写一个可以处理此问题的正则表达式?
我已经构建了一个Django站点,它将在它生存时存在于根目录中.现在它在IP地址上运行良好.出于测试目的,客户端已指向其中的代理URL,但URL中包含/ folder/path,因此没有任何URL模式匹配.我把(/ folder/path)?所有的url模式,所以他们现在响应,但所有链接都被破坏,因为我使用{%url%}标记,而url模式将匹配可选路径,他们不包括在该标记中.
显然,我可以硬编码/文件夹/路径到我的所有网址(好吧,进入所有网址包括),直到测试完成,但是有更好的方法吗?
介绍
我对localeURL用法有疑问.对于我来说,一切都很棒,如下所示:http: //www.example.com/
如果我在地址栏中键入 http://www.example.com/,则会在http://www.example.com/ en /中正确转到.
如果我使用视图change_locale,它也可以(即更改www.example.com/ en/in www.example.com/ fr /).
问题
但我的应用程序使用apache作为服务器,使用mod_wsgi.httpd.conf脚本包含以下行:
WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi
Run Code Online (Sandbox Code Playgroud)
给出这样的网址:http:
//www.example.com/MY_PREFIX/
change_locale视图出现了同样的问题.我修改了这段代码以便管理这个前缀(存储在settings.SERVER_PREFIX中):
def change_locale(request) :
"""
Redirect to a given url while changing the locale in the path
The url and the locale code need to be specified in the
request parameters.
O. Rochaix; Taken from localeURL view, and tuned to manage :
- SERVER_PREFIX …Run Code Online (Sandbox Code Playgroud) 我不知道这个问题是否与我将描述的问题相同,但它确实有相同的症状.不幸的是,在我写作时它仍然没有得到解决.
所以这是我的问题.我正在尝试将James Bennett的django-registration应用程序添加到我的django项目中.我已经完成了根据我的需求配置它 - 自定义模板和网址.就在我认为一切都很好的时候.我在NoReverseMatch使用django-registration所需的自定义模板之一时遇到了错误{% url 'testing' item_id=123 %}(我也尝试使用视图名称,myapp.views.test而不是运气).有趣的是,我尝试reverse('testing', kwargs={'item_id':123})在shell中,网址也很好.我认为在后端{% url %}使用reverse()但为什么我会得到不同的结果?
urls.py :(我网站的URLconf)
urlpatterns = patterns('myapp.views',
url(r'^test/(?P<item_id>\d+)/$', 'test', name='testing'),
)
Run Code Online (Sandbox Code Playgroud)
activation_email.txt :(所说的模板.请注意它是django-registration所要求的.txt扩展名中的故意,这不应该是问题的原因.)
{% comment %}Used to generate the body of the activation email.{% endcomment %}
Welcome to {{ site }}! Please activate your account by clicking on the following link:
{% url 'testing' item_id=123 %}
Note the activation link/code …Run Code Online (Sandbox Code Playgroud) 我在urls.py中使用正则表达式时遇到了一些问题(我是django的初学者以及一般的正则表达式)
这是我原来的urls.py
url(r'^name/(?P<name>\w+)/$', 'course.views.name'),
url(r'^', 'course.views.index'),
Run Code Online (Sandbox Code Playgroud)
我试图使用这个来访问它:
http://127.0.0.1:8000/name/blah/
Run Code Online (Sandbox Code Playgroud)
我的观点如下:
def index(request):
return HttpResponse("Hello, sam. You're at the course index.")
def name(request, name):
return HttpResponse("Hello, %s. You're at the course index." % name)
Run Code Online (Sandbox Code Playgroud)
我得到的结果是,无论我给出什么输入,我都会定期获得"索引"功能,而不是"名称"功能.我认为问题出在第一个正则表达式上.
但后来,我把第二个改为:
url(r'^$', 'course.views.index'),
Run Code Online (Sandbox Code Playgroud)
而这正是我认为它工作的方式!
我知道"$"表示行尾,但是第一个正则表达式是不是已经被评估过了?这些表达式匹配的顺序是什么?
在每个网址上添加"$"并不是什么大不了的事,但我想理解为什么要把它放在那里.
我正在使用Django1.4和Python 2.7
是否可以为一个URL模式定义多个名称?我想合并两个视图,而没有找到每个视图的所有引用并更改它们.保留这两个名字的另一个好处是以防我以后想要再次拆分它们.
例如,合并
url(r'^login/', TemplateView.as_view(template_name='login.html'), name='login'),
url(r'^profile/', TemplateView.as_view(template_name='profile.html'), name='profile'),
Run Code Online (Sandbox Code Playgroud)
至
url(r'^profile/', TemplateView.as_view(template_name='profile.html'), name=('login', 'profile')), #???
Run Code Online (Sandbox Code Playgroud) 我想用来自的变量重定向url模式urls.py.
我引用 其他stackoverflow解决方案,但我不知道什么时候url有一个变量,如下面的代码.
from django.conf.urls import patterns, url
from django.views.generic import RedirectView
urlpatterns = patterns(
url(
r'^permalink/(?P<id>\d+)/foo/$',
RedirectView.as_view(url='/permalink/(?P<id>\d+)/')
),
)
Run Code Online (Sandbox Code Playgroud)
使用此代码,django将重定向/permalink/1/foo/到/permalink/(?P<id>\d+)/,而不是/permalink/1/.
有没有使用的views.py解决方案?
当然我知道使用控制器的解决方案,但我想知道使用url模式是否有任何更简单的解决方案.
假设我有一个带有参数的url模式,它会将我链接到django中的视图:
url(
r'^things/(?P<thing_name>\w+)/features/(?P<feature_name>\w+)$',
views.thingFeature,
name='thing_feature'
),
Run Code Online (Sandbox Code Playgroud)
让我们说我有一个thing和一个feature:
thing = Thing.objects.get(.....)
feature = thing.feature_set.first()
t_name = thing.name
f_name = feature.name
Run Code Online (Sandbox Code Playgroud)
现在Django给了我很棒的能力来获取一个网址,它将我带到一个专门针对特定事物的特定功能的页面.我可以这样做:
from django.core.urlresolvers import reverse
url = reverse('thing_feature', thing_name=t_name, feature_name=f_name)
# url == '/things/thing2/features/left-arm'
Run Code Online (Sandbox Code Playgroud)
现在我偶然发现了一个我需要专门解决的问题.我不是在寻找解决方法 - 我正在寻找解决以下问题:
给定一个url name,如何获取kwarg反转该url所需的参数名称列表?
我正在寻找这个功能get_kwarg_names_for_url.它的行为如下:
url_kwarg_names = get_kwarg_names_for_url('thing_feature')
# url_kwarg_names == ['thing_name', 'feature_name']
Run Code Online (Sandbox Code Playgroud)
url_kwarg_names现在是我需要提供给Django reverse函数的每个关键字的列表,以便反转命名的url "thing_feature".
任何帮助表示赞赏!
根据knbk的回答,我能够提出以下解决方案:
def get_kwarg_names_for_url(url_name):
resolver = get_resolver(get_urlconf())
reverse_data = resolver.reverse_dict[url_name]
pattern_list = reverse_data[0]
'''
Need …Run Code Online (Sandbox Code Playgroud) 在Django <2中,正常的方法是使用正则表达式.但现在建议在Django => 2中使用path()而不是url()
path('account/<int:code>/', views.account_code, name='account-code')
Run Code Online (Sandbox Code Playgroud)
这看起来还不错,并且可以很好地匹配url模式
/account/23/
/account/3000/
Run Code Online (Sandbox Code Playgroud)
但是,这个问题是我也希望这个匹配负整数
/account/-23/
Run Code Online (Sandbox Code Playgroud)
请问如何使用path()执行此操作?
我正在尝试在 index.html 上显示由 new_measurement 定义的表单,但我只能设法开始IndexView()工作。我尝试了IndexView()和之间的各种组合new_measurement(),但这些都没有奏效。我知道这IndexView()不会传递任何与 相关的东西new_measurement(),new_measurement()也不会被调用,这是我问题的核心。如果有对 Django 更有经验的人能告诉我我能做什么或应该做什么,我将不胜感激。谢谢你。
这是我的views.py:
from django.shortcuts import render
from django.utils import timezone
from .models import Measurement
from .forms import MeasurementForm
from django.views import generic
class IndexView(generic.ListView):
model = Measurement
context_object_name = 'measurement_list'
template_name = 'index.html'
queryset = Measurement.objects.all()
def new_measurement(request):
if request.method == "POST":
form = MeasurementForm(request.POST)
if form.is_valid():
measurement = form.save(commit=False)
measurement.measurement_date = timezone.now()
measurement.save()
else:
form = MeasurementForm()
return …Run Code Online (Sandbox Code Playgroud) django-urls ×10
django ×9
python ×7
regex ×2
django-1.4 ×1
django-views ×1
django-wsgi ×1
mod-wsgi ×1