在 Django 中将文件路径作为 URL 参数传递
Pass a file path as a URL parameter in Django
我正在使用 Django 创建一个网络应用程序。当用户按下某个按钮时,它需要将文件路径作为参数和字符串参数传递给我的一个视图。我不能简单地使用 URL 中的参数,因为路径包含多个“/”。我现在的设置方式如下:
parameters.py
class FilePathConverter:
regex = '^[/]'
def to_python(self, value):
value=str(value)
return value.replace("?", "/")
def to_url(self, value):
value=str(value)
return value.replace("/", "?")
urls.py
from django.urls import path
from . import views
from django.contrib import admin
from django.views import generic
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.FilePathConverter, 'filepath')
urlpatterns = [
path('', views.index, name='webpanel-index'),
path('controlserver/<filepath:server_path>/<str:control>', views.index, name='controlserver'),
]
views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Server
from django.contrib.auth.decorators import login_required
import subprocess
def controlserver(request, server_path, control):
if request.POST:
subprocess.call(['bash', server_path, control])
return render(request, 'index.html')
但是,使用这种方法,我得到了这个错误:
Reverse for 'controlserver' with keyword arguments '{'server_path': 'rien/', 'control': 'start'}' not found. 1 pattern(s) tried: ['controlserver/(?P<server_path>[^/]+)/(?P<control>[^/]+)$']
您可以使用 Slug 解决此模式:
从 django.utils.text 导入 slugify
路径('controlserver/use slug .....',views.index,名称='controlserver'),
但是你需要在视图和模板中放置 slug 所以检查这个 slug 和 pk 列表:
https://github.com/salah-cpu/migration/blob/master/PATH_slug_pk
我正在使用 Django 创建一个网络应用程序。当用户按下某个按钮时,它需要将文件路径作为参数和字符串参数传递给我的一个视图。我不能简单地使用 URL 中的参数,因为路径包含多个“/”。我现在的设置方式如下:
parameters.py
class FilePathConverter:
regex = '^[/]'
def to_python(self, value):
value=str(value)
return value.replace("?", "/")
def to_url(self, value):
value=str(value)
return value.replace("/", "?")
urls.py
from django.urls import path
from . import views
from django.contrib import admin
from django.views import generic
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.FilePathConverter, 'filepath')
urlpatterns = [
path('', views.index, name='webpanel-index'),
path('controlserver/<filepath:server_path>/<str:control>', views.index, name='controlserver'),
]
views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Server
from django.contrib.auth.decorators import login_required
import subprocess
def controlserver(request, server_path, control):
if request.POST:
subprocess.call(['bash', server_path, control])
return render(request, 'index.html')
但是,使用这种方法,我得到了这个错误:
Reverse for 'controlserver' with keyword arguments '{'server_path': 'rien/', 'control': 'start'}' not found. 1 pattern(s) tried: ['controlserver/(?P<server_path>[^/]+)/(?P<control>[^/]+)$']
您可以使用 Slug 解决此模式:
从 django.utils.text 导入 slugify
路径('controlserver/use slug .....',views.index,名称='controlserver'),
但是你需要在视图和模板中放置 slug 所以检查这个 slug 和 pk 列表:
https://github.com/salah-cpu/migration/blob/master/PATH_slug_pk