How Django';s的url模板标记有效吗?
How Django';s的url模板标记有效吗?,django,django-templates,templatetags,Django,Django Templates,Templatetags,{“%url”新闻\u id“%”是如何工作的? 我确实有一个url模式url(r'^((?:\w |-)+)/$”,“comments.views.home”,name='news\u id'),但我仍然得到NoReverseMatch 上面说 未找到参数为“()”且关键字参数为“{}”的“news_id”的反转。已尝试1个模式:['((?:\w |-)+)/$'] views.py from django.shortcuts import render from comments.model
{“%url”新闻\u id“%”
是如何工作的?
我确实有一个url模式url(r'^((?:\w |-)+)/$”,“comments.views.home”,name='news\u id')
,但我仍然得到NoReverseMatch
上面说
未找到参数为“()”且关键字参数为“{}”的“news_id”的反转。已尝试1个模式:['((?:\w |-)+)/$']
views.py
from django.shortcuts import render
from comments.models import User
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext, loader, Context
from comments.models import News, User, Comment
from django.core.urlresolvers import resolve
def home(request, url_arg):
print "in Views.py", "and url_arg = ", url_arg
c = Comment.objects.all().filter(news__news_id=url_arg)
n = News.objects.all().get(news_id=url_arg)
cont = Context({'news': n.text, 'cts': c, 'news_id': n.news_id})
rc = RequestContext(request, cont)
t = loader.get_template('home.html')
print 'n = ', n
return HttpResponse(t.render(rc))
return render(request, 'home.html', context_dict, context_instance=RequestContext(request))
def submit(request):
print "request.path_info = ", request.path_info
print "in submit method and url = ", resolve(request.path_info).url_name, " & other try = ", request.resolver_match.url_name
news_id = request.POST.get('news_id')
user_id = request.POST.get('user_id')
comment_text = request.POST.get('comment')
print "news_id =", news_id, "user_id = ", user_id, "comment_text = ", comment_text
n = News(news_id=news_id)
n.save()
u = User(name='random',user_id=user_id)
u.save()
c = Comment(news=n, user=u, text=comment_text)
c.save()
return HttpResponse("Thanks!")
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
# Examples:
url(r'^(?:\w|-)+/submit/$','comments.views.submit'),
url(r'^((?:\w|-)+)/$', 'comments.views.home', name='news_id'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
]
url.py
from django.shortcuts import render
from comments.models import User
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext, loader, Context
from comments.models import News, User, Comment
from django.core.urlresolvers import resolve
def home(request, url_arg):
print "in Views.py", "and url_arg = ", url_arg
c = Comment.objects.all().filter(news__news_id=url_arg)
n = News.objects.all().get(news_id=url_arg)
cont = Context({'news': n.text, 'cts': c, 'news_id': n.news_id})
rc = RequestContext(request, cont)
t = loader.get_template('home.html')
print 'n = ', n
return HttpResponse(t.render(rc))
return render(request, 'home.html', context_dict, context_instance=RequestContext(request))
def submit(request):
print "request.path_info = ", request.path_info
print "in submit method and url = ", resolve(request.path_info).url_name, " & other try = ", request.resolver_match.url_name
news_id = request.POST.get('news_id')
user_id = request.POST.get('user_id')
comment_text = request.POST.get('comment')
print "news_id =", news_id, "user_id = ", user_id, "comment_text = ", comment_text
n = News(news_id=news_id)
n.save()
u = User(name='random',user_id=user_id)
u.save()
c = Comment(news=n, user=u, text=comment_text)
c.save()
return HttpResponse("Thanks!")
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
# Examples:
url(r'^(?:\w|-)+/submit/$','comments.views.submit'),
url(r'^((?:\w|-)+)/$', 'comments.views.home', name='news_id'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
]
home.html
<p>
News: {{news}}<br>
</p>
<form action="{% url news_id %}" method="post"> {% csrf_token %}
User Id: <input type="text" name="user_id"> <br>
Comment:<br>
<input type="text" name="comment" placeholder="Express your opinion ...">
<input type="submit" value="Submit"> <br>
{% for ct in cts %}
{{ ct.text }}<br>
{% endfor %}
</form>
新闻:{{News}}
{%csrf_令牌%}
用户Id:
评论:
{cts%中ct的百分比}
{{ct.text}}
{%endfor%}
您在这里误解了一些事情。特别是,您混淆了URL模式的名称以及需要传递给它的参数
例如,如果您想在博客中捕获一篇文章的ID并将其传递给详细视图,您通常会执行以下操作:
url(r'^(?P<post_id>)/$', views.post_detail, name='post_detail')
还有,你的正则表达式很奇怪。您有一个非捕获组作为捕获组的唯一内容。我不知道你到底想用这个模式做什么,但通常主页根本不会接受任何参数——事实上你并没有传递任何参数。只需使用
r'^$'
也许发布views.py、一些html、url.py,这会让你的问题更清楚。抱歉,由于回复太晚,我的网络无法在这里工作。第二个url((?:\w |-)+)
不是非捕获url。它说不要捕获单个单词,而是捕获由-
连接的整个单词序列。第一个url(?:\w |-)+
是非捕获url,因为我想要的是,在当前url类似于example.com/news\u id
之后,submit应该将其重定向到example.com/news\u id/submit
。你觉得这个逻辑正确吗,尤其是这个提交的逻辑?