Python 3.x Django将isbn10传递到url

Python 3.x Django将isbn10传递到url,python-3.x,django,regex,Python 3.x,Django,Regex,我似乎无法将isbn10号码传递给Django <a href="{% url 'books-to-detail' fic.isbn %}"> <section class="slideshow-fiction"> <img src="{{ fic.image }}" alt="" /> <p>{{ fic.title

我似乎无法将isbn10号码传递给Django

    <a href="{% url 'books-to-detail' fic.isbn %}">
      <section class="slideshow-fiction">
        <img src="{{ fic.image }}" alt="" />
        <p>{{ fic.title|truncatewords:4 }}</p>
        <!-- <p>{{ fic.description }}</p> -->
        <p>{{ fic.author }}</p>
        <!-- <p>{{ fic.isbn }}</p> -->
      </section>
    </a>

数字示例为059318808X和0316539562。我尝试过使用re_path和regex,但是如果我得到一个数字可以通过,另一个则不行。这是我尝试过的路径之一,但0316539562没有通过

re_path(
        r"^redirect/books/(?P<isbn>[0-9]*[-| ][0-9]*[-| ][0-9]*[-| ][0-9]*[-| ][0-9]*\w)/$",
        redirect_books_to_detail,
        name="books-to-detail",
    ),
re\u路径(
r“^redirect/books/(?P[0-9]*[-[0-9]*[-[0-9]*[-[0-9]*[-[0-9]*[-[0-9]*\w)/$”,
将书籍重定向到详细信息,
name=“书籍详情”,
),
错误

正在尝试此url路径

re_path(
        r"^redirect/books/(?P<isbn>[\w\+%_& ]+)/$",
        redirect_books_to_detail,
        name="books-to-detail",
    ),
re\u路径(
r“^redirect/books/(?P[\w\+%\u&]+)/$”,
将书籍重定向到详细信息,
name=“书籍详情”,
),

我现在得到一个错误,您用来识别ISBN号的正则表达式部分看起来有点太复杂了

ISBN10由10个字符组成。其中9个应该是数字,最后一个可以是数字或
X
字符。表示这一点的正则表达式类似于
\d{9}[\dX]
[0-9]{9}[0-9X]

您可以使用python解释器快速测试这是否匹配:

>>重新导入
>>>re.fullmatch(r“\d{9}[\dX]”,“059318808X”)#返回一个匹配项
>>>re.fullmatch(r“\d{9}[\dX]”,“123X”)#不返回匹配
>>>re.fullmatch(r“\d{9}[\dX]”,“0316539562”)#返回一个匹配项
>>>re.fullmatch(r“\d{9}[\dX]”,“03165395629999”)#不返回匹配项
因此,您传递给
re\u path
的路径应该是
r“^redirect/books/(?P\d{9}[\dX])/$”


如果您决定接受包含破折号的ISBN,则需要将正则表达式更改为类似于
(\d-?){9}[\dX]
,这意味着我们需要9位数字,其中任何一位可能(但不是必须)后跟破折号,然后是最后一个数字-or-X。

我已经使用了你的建议,但现在错误是,
与“books to detail”相反,未找到参数(“”,)”。尝试了1个模式:['redirect/books/(?P\\d{9}[\\dX])/$']
。需要注意的是,django模板中的isbn是字符串。如果参数是
(“”,
,则表示传递了一个空字符串(它不是有效的isbn,因此无法与URL表达式匹配。也许您应该将代码从
href=“{%URL”books to detail'fic.isbn%}
更改为
{%If fic.isbn%}href=“{%url”books to detail'fic.isbn%}”{%endif%}
因此,如果isbn丢失,您不会尝试生成链接(在这种情况下,链接没有多大意义)是的。结果是其中一个企业没有isbn10号。谢谢