django - NoReverseMatch at / Reverse for 'snippet_detail' with arguments '('1534691562.8842607',)' not found
问题描述
我正在尝试在 django 应用程序中创建一个片段。
创建代码段时出现以下错误
NoReverseMatch at /
Reverse for 'snippet_detail' with arguments '('1534693093.896782',)' not found. 1 pattern(s) tried: ['(?P<snippet_slug>[\\d]+)$']
我无法弄清楚这个问题。url 模式和视图中的所有内容看起来都不错。但是错误仍然存在。
django_project/urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('djangobin.urls'))
]
djangobin/urls.py
urlpatterns=[
url(r'^$', views.index, name='index'),
url('^(?P<snippet_slug>[\d]+)/$', views.snippet_detail, name='snippet_detail'),
]
djangobin/views.py
def index(request):
if request.method=='POST':
f=SnippetForm(request.POST)
if f.is_valid():
snippet=f.save(request)
return redirect(reverse('djangobin:snippet_detail', args=[snippet.slug]))
else:
f=SnippetForm()
return render(request, 'djangobin/index.html',{'form':f})
def snippet_detail(request, snippet_slug):
snippet = get_object_or_404(Snippet, slug=snippet_slug)
snippet.hits += 1
snippet.save()
return render(request, 'djangobin/snippet_detail.html', {'snippet': snippet})
这是片段模型:
class Snippet(models.Model):
title=models.CharField(max_length=100, blank=True)
original_code=models.TextField()
highlighted_code=models.TextField(help_text='Contains syntax highlighted code - Read only')
expiration=models.CharField(max_length=10, choices=Pref.expiration_choices)
exposure=models.CharField(max_length=10, choices=Pref.exposure_choices)
hits=models.IntegerField(default=0, help_text='Read only field. Will be updated after every visit to snippet.')
slug=models.SlugField(help_text='Read only field. Will be filled automatically.')
created_on=models.DateTimeField(auto_now_add=True)
language=models.ForeignKey(Language, on_delete=models.CASCADE)
user=models.ForeignKey(User, on_delete=models.CASCADE)
tags=models.ManyToManyField('Tag', blank=True)
def highlight(self):
formatter=HtmlFormatter(linenos=True)
return highlight(self.original_code, self.language.get_lexer(), formatter)
def __str__(self):
# return self.language
return (self.title if self.title else "Untitled")+" - "+self.language.name
def get_absolute_url(self):
return reverse('djangobin:snippet_detail', args=[self.slug])
def save(self, *args, **kwargs):
if not self.slug:
self.slug=str(time.time()).replace(",","")
self.highlighted_code=self.highlight()
if not self.title:
self.title="Untitled"
super(Snippet, self).save(*args, **kwargs)
class Meta:
ordering=['-created_on']
解决方案
您的 URL 模式只接受数字,但您的 slug 包含一个点。
您可以添加一个点:
url('^(?P<snippet_slug>[\d.]+)/$',
尽管我不确定您为什么将时间戳用作 slug。
推荐阅读
- database - 错误状态:PostgreSQLSeverity.error:指定的参数类型与查询中的列参数类型不匹配 SELECT to_regclass(@tableName:text)
- php - 函数 each() 已折旧,但 foreach 循环未正确转换
- python-3.x - 合并字典列表而不覆盖
- corda - VaultQuery 超出默认页面大小
- spring-boot - 在 GemFire 服务器中部署 Spring Boot JAR
- ios - Swift 4:元组类型“(赋值:赋值,任务:[任务])”的值没有成员“下标”
- sql - 如何在指示的点将此 DB2 SQL 查询更改为右连接?
- java - Java - 扫描仪声明
- r - ggplot2 - 跨多个绘图的通用色标
- visual-studio-code - 更改 VS Code 中注释周围字符的颜色