如果我有一个带有名字的对象Object 1并且我想要get()那个对象,但是我试图用一个诽谤的名字来获取它object-1,有什么办法可以做到这一点吗?就像是:
Model.objects.get(name__slugify = slugifiedname)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想避免在模型中添加额外的slug字段.
什么是正确的使用方法,并参考django 1.3中的slugfield
例如,以下代码应通过slug链接到通用视图,但是会收到NoReverseMatch错误.
Caught NoReverseMatch while rendering: Reverse for 'single_post' with arguments '('', u'post-2')' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这说错误在于模板然而是新手,并且在{%url single_post slug = post.slug%}上尝试了许多不同的变化,这可能不是这种情况.
有人可以解释为什么会发生这种情况,以便我能够理解问题所在以及如何解决.
我试过{%url single_post slug = post.slug%},{%url single_post slug%} {%url single_post slug = post.slug%}和许多其他变种
非常感谢所有帮助
模型
slug = models.SlugField(max_length=120, unique=True)
Run Code Online (Sandbox Code Playgroud)
网址
url(r'^post/(?P<slug>[a-z-]+)/$', list_detail.object_detail,
{'queryset': Post.objects.all(), 'template_object_name': 'post', 'slug_field': 'slug'}, name="single_post"),
Run Code Online (Sandbox Code Playgroud)
模板
{% url single_post slug post.slug %}
Run Code Online (Sandbox Code Playgroud) 我在Symfony2项目中使用了可缓慢的行为,但现在我想基于不同的文本(当前标题,旧标题,来自表单输入的用户文本)为一页制作许多slug,并将其保存在另一个页面中表.我的问题是 - 如何手动使用任何文本的学说扩展?我找不到任何地方.完美将是这样的:
/* careful - it's not a real, working code! */
$sluggable = new DoctrineSluggable();
$slug = $sluggable->generate('My own text!');
echo $slug; // my-own-text
Run Code Online (Sandbox Code Playgroud) 我参与了一个网络项目。我必须选择表示代码的最佳方式,以便其他人可以毫无问题/头痛/无所事事地阅读它。
我现在解决的“问题”是显示一个漂亮的格式化网址(将从“标题”字符串中获取)。
所以,假设我们有一个从表单中获取的标题:
title = request.form['title'] # 'Hello World, Hello Cat! Hello?'
Run Code Online (Sandbox Code Playgroud)
然后我们需要一个函数来格式化它以包含在 url 中(它需要变成 'hello_world_hello_cat_hello'),所以目前我正在使用这个我认为可读性很差的函数:
str.replace(title, ' ', '-').str.replace(title, '!', '').str.replace(title, '?', '').str.replace(string, ',' '').lower()
Run Code Online (Sandbox Code Playgroud)
压缩它的好方法是什么?是否已经有一个功能可以做我正在做的事情?
我还想知道我应该从 url 中删除哪些字符/符号。
我的用户有时会使用中文字符作为输入标题.
我的slu is的形式/stories/:id-:name可以是一个例子/stories/1-i-love-php.
我如何允许中文字符?
我用Google搜索并在这里找到了这个答案的日文版.
不太懂日语,所以我问的是中文版.
谢谢.
我正在使用这个包Github:eluquent-sluggable-persian使用阿拉伯语来表示 slug,他们使用正则表达式来表示包配置文件,我不太擅长它,我遇到的错误是
sluggable.php 第 106 行中的 ErrorException:
preg_replace():编译失败:在偏移量 0 处无需重复
sluggable.php 是我应该用原始配置文件替换的配置文件,我需要知道如何解决这个问题。
有错误的代码
'method' => function($string, $separator = '-')
{
$_transliteration = array(
'/ä|æ|?/' => 'ae',
'/ö|œ/' => 'oe',
'/ü/' => 'ue',
'/Ä/' => 'Ae',
'/Ü/' => 'Ue',
'/Ö/' => 'Oe',
'/À|Á|Â|Ã|Å|?|?|?|?|?/' => 'A',
'/à|á|â|ã|å|?|?|?|?|?|ª/' => 'a',
'/Ç|?|?|?|?/' => 'C',
'/ç|?|?|?|?/' => 'c',
'/Ð|?|?/' => 'D',
'/ð|?|?/' => 'd',
'/È|É|Ê|Ë|?|?|?|?|?/' => 'E',
'/è|é|ê|ë|?|?|?|?|?/' => 'e',
'/?|?|?|?/' => 'G',
'/?|?|?|?/' => 'g',
'/?|?/' => 'H',
'/?|?/' => 'h',
'/Ì|Í|Î|Ï|?|?|?|?|?|?/' …Run Code Online (Sandbox Code Playgroud) 我有一个ExampleModel在Django中调用的模型,并且希望每个模型对象都可以唯一标识。但是,我不希望用户在URL中看到对象的ID。因此,出于这个原因,我希望对象slug是唯一的,随机生成的8位整数,该整数将进入视图URL。这与我所见过的其他问题不同,因为这意味着不会生成基于模型对象的名称//内容本身的条形字符串。
Models.py:
class ExampleModel(models.Model):
user = models.ForeignKey(UserModel, related_name='examplemodel', on_delete=models.CASCADE, null=True)
title = models.CharField(max_length=50, verbose_name='Title')
slug = models.SlugField(unique=True, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
目前,Slug的值为null,因此我不必为所有当前ExampleModel对象设置默认的Slug 。
可以理解,这是很模糊的,但是我找不到适合我的实际情况的任何指南/教程。
感谢您提供的任何帮助/指导
编辑 这是我的views.py:
def model_create(request):
user=request.user.id
if request.user.is_authenticated:
try:
example = request.user.examplemodel
except ExampleProfile.DoesNotExist:
example = ExampleProfile(user)
if request.method == 'POST':
form = NewForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('/dashboard/')
else:
return render(request, 'create.html', {'form': form})
else:
form = NewForm()
return render(request, 'create.html', {'form': form})
else:
return redirect('/users/login/?next=')
Run Code Online (Sandbox Code Playgroud)
编辑2 Models.py(保存方法):
def save(self, …Run Code Online (Sandbox Code Playgroud) 我有一个包含歌曲列表的专辑字段
class Album(models.Model):
artist = models.CharField(max_length=250)
album_title = models.CharField(max_length=250)
genre = models.CharField(max_length=100)
album_logo = models.CharField(max_length=1000,blank=True)
slug = models.SlugField(unique=True)
def __str__(self):
return self.album_title
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
artist = models.CharField(max_length=250, blank=True)
file_type = models.CharField(max_length=10)
song_title = models.CharField(max_length=100)
def __str__(self):
return self.artist
Run Code Online (Sandbox Code Playgroud)
我想知道如何从专辑标题生成 slug。我正在关注一个使用 django 1.8 的教程,它使用正则表达式来实现这个任务。但是通过查看文档,他们引入了一种更简单的方法('')。因此,您能否帮助解释我如何为初学者实施它,不仅在这种情况下而且在可能的情况下全面了解。提前致谢。
我有一个 Django 网址:
path('question/<slug:question_slug>/add_vote/', views.AddVoteQuestionView.as_view())
Run Code Online (Sandbox Code Playgroud)
它适用于 english slug 但当 slug 是波斯语时,如下所示:
/question/????-???/add_vote/
django url throw 404 Not Found,有什么解决方案可以捕获这个 perisan slug url?
编辑:
我正在使用 Django 2.1.5。
使用此网址可以正常工作:
re_path(r'question/(?P<question_slug>[\w-]+)/add_vote/$', views.AddVoteQuestionView.as_view())
Run Code Online (Sandbox Code Playgroud) 你好,我是 Django 的新手,我正在尝试建立一个网站。 在管理页面http://127.0.0.1:8000/admin/posts/post/我添加了两个帖子,一个有一个 slug,**第一个 slug 是第一个,第二个是第二个问题是当我尝试时到达http://127.0.0.1:8000/posts/first或http://127.0.0.1:8000/posts/second它给我一个 404 错误,它告诉我**
使用 custom.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:
Run Code Online (Sandbox Code Playgroud)admin/ posts/ [name='posts_list'] <slug>当前路径,posts/first,与这些都不匹配。
这是models.py
from django.db import models
from django.conf import settings
Create your models here.
User = settings.AUTH_USER_MODEL
class Author(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
email = models.EmailField()
phone_num = models.IntegerField(("Phone number"))
def __str__(self):
return self.user.username
class Post(models.Model):
title = models.CharField(max_length=120)
description = models.TextField()
slug = models.SlugField()
image = models.ImageField()
author = models.OneToOneField(Author, on_delete=models.CASCADE)
def …Run Code Online (Sandbox Code Playgroud)