Я прочитал следующие ответы: это, это, это.
Однако эти ссылки не дал мне ясности.
Код: Выделить всё
in HTML file script:
function cmb_pos() {
var data = {
'dep_id': dep_id, 'div_id': div_id,
}
fetch('/job-history/add-new/intermediate/{{persona_id}}', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(response => console.log(JSON.stringify(response)))
};
Код: Выделить всё
from starlette.datastructures import URL
@router.post(path="/add-new/intermediate/{persona_id}",
response_class=responses.RedirectResponse,
)
async def my_test(request: Request, item: Item, persona_id: int, service: Related):
staff_schedule = await service.get_item_by_where(....)
context_ext = {}
context_ext["request"] = request
context_ext["staff_schedule"] = staff_schedule
context_ext["flag"] = True
redirect_url = URL(request.url_for("create_job_history_init", persona_id=persona_id))
.include_query_params(context_ext=context_ext)
return responses.RedirectResponse(
url=redirect_url,
status_code=status.HTTP_303_SEE_OTHER,
)
Код: Выделить всё
@router.get(path="/persona_id={persona_id}/add-new",
response_class=responses.HTMLResponse,
)
async def create_job_history_init(request: Request, persona_id: int,
schedule_service: CommonsDep, context_ext: Optional[dict] = None,
):
context = {}
schedule = await schedule_service.get_all_item()
related = ......
context = schedule | related
context["request"] = request
context["persona_id"] = persona_id
context["context_ext"] = context_ext
return backend.webapps.templates.TemplateResponse(
name="job_history/create_job_history.html",
context=context,
)
Файл "/Users/pas/-- ----/backend/webapps/job_history.py", строка 276, в my_test
).include_query_params(context_ext=context_ext)
Файл "/Users/pas/-------/.my_pers/lib/python3.11/site-packages/starlette/datastructures.py", строка 143, в include_query_params
params = MultiDict(parse_qsl(< strong>self.query, Keep_blank_values=True))
Файл "/Users/pas/---------/.my_pers/lib/python3. 11/site-packages/starlette/datastructures.py", строка 83, в запросе
возврат self.comComponents.query
Файл "/Users /pas/---------/.my_pers/lib/python3.11/site-packages/starlette/datastructures.py", строка 66, в компонентах
self._comComponents = urlsplit (self._url)
TypeError: нехэшируемый тип: 'URL'
Что я делаю не так?
Можно ли передать дополнительные данные через редирект?
Заранее большое спасибо
обновление:
в этом предложено это решение, но я получаю в нем ошибку
возврат кортежа (x.decode(кодировка, ошибки), если x else '' для x в аргументах)
AttributeError: объект 'URL' не имеет атрибута 'decode'
parsed = list(urllib.parse.urlparse(redirect_url))
для меня правильное решение такое:
parsed = list(urllib.parse.urlparse(redirect_url ._url ))
после добавления ._url я был умею разбирать
Подробнее здесь: https://stackoverflow.com/questions/773 ... ng-the-dat